2016-07-29 1 views
1

Я пытаюсь скопировать таблицы базы данных retail_db в базу данных hive, которую я уже создал. Когда я выполнить следующий кодПолучение файла существует ошибка при импорте в Hive с использованием sqoop

sqoop import-all-tables \ 
--num-mappers 1 \ 
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \ 
--username=retail_dba \ 
--password=cloudera \ 
--hive-import \ 
--hive-overwrite \ 
--create-hive-table \ 
--outdir java_files \ 
--hive-database retail_stage 

Моя Map-Reduce задания прекращается со следующей ошибкой:

ERROR tool.ImportAllTablesTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://quickstart.cloudera:8020/user/cloudera/categories already exists

Я пытаюсь скопировать таблицы в улей базу данных, тогда почему существующий файл в Cloudera вызвало проблема. Есть ли способ игнорировать эту ошибку или перезаписать существующий файл.

ответ

3

Это как работает sqoop импорт работы:

  • sqoop создает/данные по импорту в tmp директории (HDFS), которая пользователь домашнего каталога (в вашем случае это /user/cloudera).

  • Затем скопируйте данные его фактического расположения улья (т.е. /user/hive/wearhouse.

  • Это categories реж должны существовать до запуска операторы импорта. Поэтому удалить этот реж или переименовать его, если его значение.

hadoop fs -rmr /user/cloudera/categories

ИЛИ

hadoop fs -mv /user/cloudera/categories /user/cloudera/categories_1

и перезапустите команду sqoop!

Короче говоря, импорт в Hive будет использовать HDFS как перевалочный место и sqoop удаляет постановка реж /user/cloudera/categories после копирования (успешно) к фактическому HDFS месте - это последний этап sqoop работы по очистке поэтапности файлов/TMP - так если вы попытаетесь перечислить каталог stmp tmp, вы его не найдете.

После успешного импорта: hadoop fs -ls /user/cloudera/categories - dir не будет.

2

Sqoop импорт в улье работает в 3 этапа:

  • помещает данные в HDFS
  • Создать улей таблицу, если не существует
  • загрузки данных в таблице улей

Вы не упомянули --target-dir или --warehouse-dir, поэтому он поместит данные в домашний каталог HDFS, который, я считаю, /user/cloudera/ в вашем случае.

Теперь для таблицы MySQL categories вы, возможно, импортировали ее ранее. Итак, существует каталог /user/cloudera/categories, и вы получаете это исключение.

Добавить несуществующую директорию в --taget-dir как --taget-dir /user/cloudera/mysqldata. Затем sqoop поместит все таблицы Mysql, импортированные вышеуказанной командой в этом месте.

0

Вы не можете использовать hive-import и hive-overwrite в то же время.

Версия I подтвердила эту проблему;

$ sqoop help import 

--hive-overwrite Overwrite existing data in the Hive table

$ sqoop version 

Sqoop 1.4.6-cdh5.13.0

исх. https://stackoverflow.com/a/22407835/927387

 Смежные вопросы

  • Нет связанных вопросов^_^