0

将 csv 数据从外部源引入 HDFS 并以特定格式存储的过程和工具是众所周知的。但是,如何转换HDFS 中已经存在的数据的数据格式?

我正在使用 Json 格式/未压缩的 HDFS 上的现有数据集(〜多 TB)。如何将集群上的数据转换为同一个集群上的 Parquet,同时最小化集群资源?

选项:

  • 临时获取另一个相同大小的集群,并在转换时将所有数据移过来,然后将数据移回?
  • 临时补充现有集群上的额外节点?如何确保它们仅用于此迁移?
  • ??

谢谢,

马特

4

1 回答 1

1

您可以编写一个 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 路径。

资源

于 2015-05-13T10:54:36.673 回答