Как загрузить данные в куст из HDFS, не удаляя исходный файл? - PullRequest
46 голосов
/ 27 сентября 2011

При загрузке данных из HDFS в Hive с помощью команды

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

создается впечатление, что он перемещает файл hdfs_file в hive/warehouse dir.Можно ли (как?) Скопировать его, вместо того, чтобы перемещать его, чтобы файл мог использоваться другим процессом.

Ответы [ 3 ]

82 голосов
/ 30 сентября 2011

из вашего вопроса я предполагаю, что у вас уже есть ваши данные в формате hdfs. Таким образом, вам не нужно LOAD DATA, который перемещает файлы в местоположение куста по умолчанию /user/hive/warehouse. Вы можете просто определить таблицу с помощью ключевого слова external, которое оставляет файлы на месте, но создает определение таблицы в метасольве улья. Посмотреть здесь: Создать таблицу DDL eg.:

create external table table_name (
  id int,
  myfields string
)
location '/my/location/in/hdfs';

Обратите внимание, что используемый вами формат может отличаться от используемого по умолчанию (как упомянуто в комментариях JigneshRawal). Вы можете использовать свой собственный разделитель, например, при использовании Sqoop:

row format delimited fields terminated by ','
5 голосов
/ 06 февраля 2017

Я обнаружил, что, когда вы используете EXTERNAL TABLE и LOCATION вместе, Hive создает таблицу, и первоначально данные не будут представлены (при условии, что ваше местоположение данных отличается от Hive 'LOCATION').

Когдапри использовании команды «LOAD DATA INPATH» данные перемещаются (вместо копирования) из местоположения данных в местоположение, указанное вами при создании таблицы Hive.

Если местоположение не указано при создании таблицы Hive, оно используетвнутреннее местоположение хранилища Hive и данные будут перемещены из исходного местоположения данных в внутреннее хранилище данных Hive (т.е. /user/hive/warehouse/).

3 голосов
/ 06 февраля 2017

Доступна альтернатива «ЗАГРУЗИТЬ ДАННЫЕ», при которой данные не будут перемещены из существующего исходного местоположения в хранилище данных улья.

Вы можете использовать команду ALTER TABLE с опцией 'LOCATION'. Вот ниже обязательная команда

ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'

Единственное условие здесь - местоположение должно быть каталогом, а не файлом.

Надеюсь, что это решит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...