2016-09-25 3 views
0

Я пытаюсь импортировать таблицу из базы данных MySql в таблицу hive, чтобы понять, как работает импорт кустов. Имя таблицы - это устройство, которое я уже импортировал в HDFS в домашнем каталоге в HDFS. Я создал таблицу в улье, используя инструкцию ниже.Sqoop Hive import

create table device_hive (device_num int,device_name varchar(255)); 

Теперь я уверен, выполнение ниже sqoop оператора импорта, чтобы получить данные из таблицы device в базе данных Mysql для Hive

sqoop import --connect jdbc:mysql://localhost/loudacre --table device 
--username training --password training --hive-import --hive-table device_hive 
--hive-database hadoopexam --hive-table device_hive --fields-terminated-by '\001' 
--table device --columns "device_num,device_name" 

Ее недостаток заявив, что устройство вывода каталога уже exists.The место в сообщении об ошибке указывает на папку device в HDFS, которую я импортировал с помощью sqoop ранее.

Мой вопрос в том, почему sqoop собирается в базовую директорию и проверяет эту папку. Это импорт улей, поэтому не нужно делать sqoop в каталог улья/склада? Я удаляю эту папку из HDFS, и она отлично работает. Какие-либо предложения.

ответ

0

Согласно documentation

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

Итак, если вы уже импортировали таблицу в HDFS, ошибка, которую уже существует в каталоге device, будет нормальным поведением. Когда вы добавляете команду --hive-import, Sqoop копирует данные в HDFS (в вашем случае в каталоге device) и обновляет метастабильность улья с помощью макета данных.

Вы можете использовать опцию для того, чтобы сказать Sqoop переписать таблицу:

Если таблица улей уже существует, вы можете указать --hive-перезаписать параметр, чтобы указать, что существующую таблицу в улей необходимо заменить.

Надеюсь, это поможет.

+0

Это сработало. Спасибо большое. –

+0

Добро пожаловать :-) –

0

Вам нужно понять, как импортируется Sqoop в улей.

Он работает в 3 этапа:

  • Импорт данных в HDFS (home_directory/table_name)
  • CREATE TABLE Hive ....
  • НАГРУЗКИ INPATH DATA ...

В соответствии с docs,

После того, как ваши данные импортированы в HDFS или этот шаг опущен, Sqoop будет генерировать сценарий Hive, содержащий операцию CREATE TABLE, определяющую ваши столбцы с использованием типов Hive, и оператор LOAD DATA INPATH для перемещения файлов данных в каталог склада Hive.

В вашем случае это не удается на первом этапе.

+0

Спасибо, что помогли мне. –

0

Используйте аргумент управления импортом --delete-target-dir. Он удалит целевой каталог импорта, если он существует.