2013-06-27 5 views
1

Мне нужно импортировать> 400 миллионов строк из таблицы MySQL (с составным первичным ключом) в таблицу разделов таблицы улов с помощью Sqoop. Таблица имеет данные в течение двух лет с датой вылета колонки, начиная с 20120605 по 20140605 и тысячами записей за один день. Мне нужно разбить данные на основании даты вылета.Импорт из MySQL в Hive с использованием Sqoop

Варианты:

Apache Hadoop - 1.0.4

Apache Hive - 0.9.0

Apache Sqoop - sqoop-1.4.2.bin__hadoop-1.0.0

Как по моим сведениям, существует 3 подхода:

  1. MySQL -> Неразделенная таблица улья -> INSERT из непарной titioned Hive стол в секционированных улей таблице
  2. MySQL -> Разделенный Hive таблица
  3. MySQL -> несекционированные Hive стол -> ALTER несекционированные Hive стол добавить Partition

    1. является тока болезненный, что я следую

    2. Я прочитал, что поддержка этого добавляется позже (?) версия ульи и Sqoop, но не смогли найти пример

    3. Синтаксис диктует указать разделы, так как пар ключ-значение - не представляется возможным в случае миллионов записей, где один не может думать о всех разделов пар ключ-значение 3.

Может кто-нибудь обеспечить ввод для подходов 2 и 3?

+0

с sqoop 1.4.3 вы застряли в # 1. Я не думаю, что # 2 или # 3 возможны на данный момент. Вы могли бы написать задание на MR и напрямую работать с метаповтором sqoop для реализации # 3, но это было бы некрасиво. –

ответ

0

Я думаю, вы можете создать таблицу разделенных кустов.

Затем напишите код импорта sqoop для него.

, например:

sqoop импорт --hive-перезапись --hive-выпадающие импорт-delims --warehouse-Dir "/ склад" --hive стол \ --connect JDBC < тузд путь >/DATABASE = xxxx \ --table --username xxxx --password xxxx --num-mappers 1 --hive-partition-key --hive-partition-value -hive-import \ --fields-terminated -by ',' -lines-terminated-by '\ n'

+0

В моем первоначальном вопросе это был подход -2. Не удалось найти рабочий пример. –

+0

Отвечает ли это на ваш второй подход? – DrewRose

0

Прежде чем переносить данные в таблицу в секционированную таблицу, сначала необходимо создать структуру разбитого столбца. В то время как sqoop нет необходимости указывать ключ -hive-partition-key и -hive-partition-value, используйте -hcatalog-table вместо -hive-table.

Ману

+0

Вы перепишете это, чтобы сделать его более понятным в контексте ОП, что он должен делать? –

0

Если это все-таки то, что люди хотели, чтобы понять, что они могут использовать

sqoop import --driver <driver name> --connect <connection url> --username <user name> -P --table employee --num-mappers <numeral> --warehouse-dir <hdfs dir> --hive-import --hive-table table_name --hive-partition-key departure_date --hive-partition-value $departure_date 

Записки из пластыря:

sqoop import [all other normal command line options] --hive-partition-key ds --hive-partition-value "value" 

Некоторые ограничения:

  • Это позволяет только один раздел k ey/value
  • hardcoded тип для ключа раздела, который должен быть строкой
  • С автоматическим разбиением на разделы в улье 0.7 мы можем настроить это, чтобы иметь только одну опцию командной строки для имени ключа и использовать этот столбец из db таблица для разделения.
Смежные вопросы