Sqoop Import as-parquetfile на основе значения столбца - PullRequest
0 голосов
/ 06 сентября 2018

Итак, я пытаюсь запустить задание импорта sqoop, где я сохраняю файлы паркета на основе моего ключа для партиции. В конечном итоге я хотел бы, чтобы в моей папке /TABLE_DIR/ было 5 паркетных файлов, по 1 на каждый уникальный ключ раздела. В настоящее время я получаю только 4. Я не могу установить num-mappers 5. Таблица2 ключ_раздела может идти до 8, и для этого я хочу получить 8 файлов партера и т. Д. И т. Д.

Table1:
primary_key:[1,2,3,4,5,6,7,8,9,10]
partition_key: [1,1,1,2,2,2,3,3,4,5]
value: [15,12,18,18,21,23,25,26,24,10]

Code:
sqoop import \
     --query "select primary_key,partition_key,value from Table1" \
     --compress --compression-codec snappy \
     --split-by partition_key \
     --target-dir /TABLE_DIR/

1 Ответ

0 голосов
/ 10 сентября 2018

Поскольку импорт sqoop - это только карта, вы не можете контролировать количество выходных файлов. Об этом позаботится механизм разбиения hadoop (вы можете управлять этим в mapreduce или pig, хотя скрипты улья не уверены в sqoop, хотя параметр «fetch_size» можно посмотреть). Тем не менее, если вы действительно хотите сделать ниже

  1. Вы можете выставить таблицу кустов на этих данных (осторожно с файлом метаданных!).
  2. Вставьте эти данные в другую таблицу улья (это тоже паркет), и при вставке выполните сортировку по любому столбцу (это делается для преобразования insert-select, который снова будет заданием только для карты, в сокращение карты) задание) и установите mapreduce.job.reduces на 5 или любое другое желаемое значение.

Свойство заставит пять редукторов выдавать 5 выходных файлов.

...