将数据迁移到hdfs中已有数据的新数据格式

ddrv8njm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(267)

将csv数据从外部源引入hdfs并以特定格式存储的过程和工具是众所周知的;但是,如何为hdfs中已经存在的数据转换数据格式?
我正在处理hdfs上json格式/未压缩的现有数据集(~multi-tb)。如何将集群上的数据转换为同一集群上的Parquet,同时最小化集群资源?
选项:
临时获取另一个相同大小的集群,并在转换时移动所有数据,然后移回数据?
是否临时补充现有群集上的其他节点?如何确保它们仅用于此迁移?
??
谢谢,
马特

jaql4c8m

jaql4c8m1#

您可以编写一个java代码,使用 ParquetOutputFormat 班级。看看这里的实木地板实施。
代码如下:

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路径。
来源

相关问题