Я не мог понять разницу между следующими командами в sqoop. Было бы лучше, если бы кто-то мог объяснить с небольшими примерами.
--warehouse-dir and --target-dir
Спасибо
Я не мог понять разницу между следующими командами в sqoop. Было бы лучше, если бы кто-то мог объяснить с небольшими примерами.
--warehouse-dir and --target-dir
Спасибо
Ниже параметр указывает на расположение таблицы куста по умолчанию. Его можно использовать для целей разработки, когда вы просто хотите выполнить некоторые тесты на внутренних таблицах.
--склад-дир
Параметр ниже указывает на некоторое местоположение hdfs, где вы можете монтировать внешние таблицы куста. Это полезно в производственной среде, где вы хотите, чтобы все данные были доступны для некоторого внешнего каталога и внешней таблицы.
--target-дир
Что у меня получилось при импорте:
--warehouse-dir : создает каталог, который работает как каталог базы данных (sqoop_db_movies) и каталог с именем таблицы (как указано в команде импорта), автоматически создаваемый с импортированными файлами в каталог склада (каталог базы данных).
Пример: sqoop import --options-file /home/cloudera/sqoop/conn --table movies --warehouse-dir /sqoop_db_movies -m 1
Вывод как:
/sqoop_db_movies/фильмы
/sqoop_db_movies/фильмы/_УСПЕХ
/sqoop_db_movies/фильмы/часть-м-00000
--target-dir: создает каталог, который работает как имя таблицы (sqoop_table_movies) с импортированными файлами.
Пример: sqoop import --options-file /home/cloudera/sqoop/conn --table movies --target-dir /sqoop_table_movies -m 1
Вывод как:
/sqoop_table_movies/_УСПЕХ
/sqoop_table_movies/part-m-00000
--warehouse-dir
обычно вы используете этот параметр, когда импортируете все таблицы с помощью инструмента import-all-tables с помощью sqoop. Этот каталог может быть любым, либо вашим кустом /data/warehouse каталог или какой-либо другой родительский каталог. Все таблицы будут импортированы в этот родительский каталог.
--target-dir
Этот параметр используется, когда вам нужно импортировать одну таблицу с помощью инструмента импорта таблиц. Для каждой таблицы вы должны указать каталог, и он не должен уже существовать в пути.
Если вы хотите запустить несколько заданий Sqoop для нескольких таблиц, вам нужно будет изменить параметр --target-dir при каждом вызове.
В качестве альтернативы Sqoop предлагает еще один параметр, по которому можно выбрать выходной каталог. Вместо прямого указания конечного каталога параметр --warehouse-dir позволяет указать только родительский каталог.
Вместо того, чтобы записывать данные в каталог хранилища, Sqoop создаст каталог с тем же именем, что и таблица внутри каталога хранилища, и импортирует туда данные.
Это похоже на случай по умолчанию, когда Sqoop импортирует данные в ваш домашний каталог на HDFS, за исключением того, что параметр --warehouse-dir позволяет вам использовать каталог, отличный от домашнего каталога. Обратите внимание, что этот параметр не нужно изменять при каждом импорте таблицы, если только вы не импортируете таблицы с одним и тем же именем.
Обычно мы используем складской каталог, даже если складской каталог с несколькими таблицами или одной таблицей работает нормально.
Еще одним преимуществом является то, что с S3 работает только каталог-хранилище, это очень важно, когда вы хотите, чтобы данные внешних таблиц хранились в s3.
--warehouse-dir указывает на папку Hive для импорта данных (я использовал ее при оптовом импорте таблиц), а --target-dir необходим при импорте в Hive через запрос (sqoop ошибается, запрашивая его). В последнем сценарии он используется как временная область для картографов, за которыми следует LOAD INPATH. Я устанавливал --target-dir так же, как --warehouse-dir (после переключения с полной таблицы на импорт запроса) и получал пустые таблицы. Удалил --warehouse-dir из команды sqoop и изменил --target-dir на /tmp/newfolder, и мой импорт в Hive был доволен.