2015-05-11 4 views
0

Процесс и инструменты для ввода данных csv из внешнего источника в HDFS и сохранения их в определенном формате хорошо известны; однако, как до конвертировать форматы данных для данных, УЖЕ СУЩЕСТВУЮЩИХ в HDFS?Перенос данных в новый формат данных для данных, уже находящихся в HDFS

Я работаю с существующим набором данных (~ multi TB) на HDFS в формате Json/несжатым. Как преобразовать эти данные в кластер, скажем, Паркет, в том же кластере, минимизируя ресурсы кластера?

Варианты:

  • Временно получить другой кластер такого же размера, и переместить все данные по в процессе преобразования, а затем перейти обратно данные?
  • Дополнить дополнительные узлы на существующем кластере временно? Как обеспечить, чтобы они использовались только для этой миграции?
  • ??

Спасибо,

Matt

ответ

1

Вы можете написать Java код для преобразования существующего файла CSV для паркета с использованием ParquetOutputFormat класса. Посмотрите here для реализации паркета.

код будет выглядеть следующим образом:

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 путь HDFS в CSV-файл и /parquet путь HDFS к новому паркетным файлу.

Source

+0

спасибо, но это не вопрос .. (я буду редактировать). Я знаю, как его кодировать - проблема заключается в том, чтобы выполнить эту задачу на * существующих * данных уже в кластере (~ 4 ТБ). Это больше проблема с Dev Ops. –