0

外部ソースから HDFS に csv データを取り込み、特定の形式で保存するプロセスとツールはよく知られています。ただし、HDFS に既に存在するデータのデータ形式を変換する方法は?

Json 形式/非圧縮の HDFS で既存のデータ セット (~ マルチ TB) を使用しています。クラスターリソースを最小限に抑えながら、クラスター上のそのデータを同じクラスター上のたとえば Parquet に変換する方法は?

オプション:

  • 一時的に同じサイズの別のクラスターを取得し、変換中にすべてのデータを移動してから、データを元に戻しますか?
  • 一時的に既存のクラスターに追加ノードを追加しますか? この移行にのみ使用されるようにするにはどうすればよいですか?
  • ??

ありがとう、

マット

4

1 に答える 1

1

ParquetOutputFormatクラスを使用して、既存の csv ファイルを寄木細工に変換する Java コードを作成できます。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);
   }

/csvcsv ファイルへ/parquetの HDFS パスであり、新しい寄木細工ファイルへの HDFS パスです。

ソース

于 2015-05-13T10:54:36.673 に答える