【问题标题】:Migrate data to new data format for data already in HDFS将数据迁移到 HDFS 中已有数据的新数据格式
【发布时间】:2015-07-22 10:29:02
【问题描述】:

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

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

选项:

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

谢谢,

马特

【问题讨论】:

    标签: hadoop hdfs data-migration dataformat devops


    【解决方案1】:

    您可以编写一个 java 代码,使用 ParquetOutputFormat 类将现有的 csv 文件转换为镶木地板。查看 here 的 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 文件的 HDFS 路径,/parquet 是新 parquet 文件的 HDFS 路径。

    Source

    【讨论】:

    • 谢谢,但这不是问题..(我会编辑)。我知道如何编写代码 - 问题是对集群中已有的 existing 数据(~4TB)执行此任务。这更像是一个 Dev Ops 问题..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多