Проблема при импорте результата запроса из mysql в существующую таблицу кустов - PullRequest
0 голосов
/ 29 марта 2019

Когда я пытаюсь импортировать таблицу MySQL в существующую таблицу кустов, приведенные ниже команды работают нормально. Но когда я пытаюсь использовать запрос для импорта результата в ту же таблицу кустов, он запрашивает --target-dir и --split-by. Обязательно ли указывать их при импорте результатов запроса? почему они не требуются при импорте напрямую из таблицы

Я получаю сообщение об ошибке ниже -

Предупреждение: /usr/lib/sqoop/../accumulo не существует! Импорт Accumulo потерпит неудачу. Пожалуйста, установите $ ACCUMULO_HOME в корневой каталог вашей установки Accumulo. 19/03/29 02:50:40 ИНФОРМАЦИЯ sqoop.Sqoop: Запуск версии Sqoop: 1.4.6-cdh5.13.0 19/03/29 02:50:40 WARN tool.BaseSqoopTool: установка пароля в командной строке небезопасна. Попробуйте вместо этого использовать -P. Необходимо указать пункт назначения с помощью --target-dir. Попробуйте --help для инструкций по использованию.

Импорт непосредственно из таблицы форм -

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba \
--password cloudera \
--m 2 \
--table departments \
--hive-import \
--hive-home "/user/hive/warehouse/" \
--hive-table sqoop_import.dep \
--hive-overwrite \
--outdir java_files \

Импорт по запросу -

sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username retail_dba \
--password cloudera \
--m 2 \
--query "select department_id,department_name from departments where \$CONDITIONS and department_id>2" \
--hive-import \
--hive-home "/user/hive/warehouse/" \
--hive-table sqoop_import.dep \
--hive-overwrite \
--outdir java_files \

1 Ответ

0 голосов
/ 30 марта 2019

1. целевой реж

По умолчанию Sqoop создаст каталог с тем же именем, что и импортированная таблица, в вашей домашней директории в HDFS и импортирует все данные там. Поэтому при импорте с использованием --query имя каталога неизвестно, и вам нужно явно указать его.

2. разделенный на

При выполнении параллельного импорта Sqoop необходим критерий, по которому он может разделить рабочую нагрузку. Sqoop использует столбец разделения для разделения рабочей нагрузки. По умолчанию Sqoop идентифицирует столбец первичного ключа (если имеется) в таблице и использует его в качестве столбца разделения, но с помощью импорта запросов вы должны выбрать столбец разделения с помощью --split-by (см. method ) ,

...