将 csv 数据从外部源引入 HDFS 并以特定格式存储的过程和工具是众所周知的。但是,如何转换HDFS 中已经存在的数据的数据格式?
我正在使用 Json 格式/未压缩的 HDFS 上的现有数据集(〜多 TB)。如何将集群上的数据转换为同一个集群上的 Parquet,同时最小化集群资源?
选项:
- 临时获取另一个相同大小的集群,并在转换时将所有数据移过来,然后将数据移回?
- 临时补充现有集群上的额外节点?如何确保它们仅用于此迁移?
- ??
谢谢,
马特
将 csv 数据从外部源引入 HDFS 并以特定格式存储的过程和工具是众所周知的。但是,如何转换HDFS 中已经存在的数据的数据格式?
我正在使用 Json 格式/未压缩的 HDFS 上的现有数据集(〜多 TB)。如何将集群上的数据转换为同一个集群上的 Parquet,同时最小化集群资源?
选项:
谢谢,
马特
您可以编写一个 java 代码来使用ParquetOutputFormat
类将现有的 csv 文件转换为镶木地板。在此处查找Parquet 实施。
代码将是这样的:
public static void main(String[] args) throws IOException,
InterruptedException, ClassNotFoundException {
Configuration conf = new Configuration();
Job job = new Job(conf);
job.setJobName("CSV to Parquet");
job.setJarByClass(Mapper.class);
job.setMapperClass(Mapper.class);
job.setReducerClass(Reducer.class);
job.setNumReduceTasks(1);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(ParquetOutputFormat.class);
job.setInputFormatClass(TextInputFormat.class);
TextInputFormat.addInputPath(job, new Path("/csv"));
ParquetOutputFormat.setOutputPath(job, new Path("/parquet"));
job.waitForCompletion(true);
}
/csv
是 csv 文件/parquet
的 HDFS 路径,是新 parquet 文件的 HDFS 路径。