Подтвердить что ты не робот

Как загрузить данные в hive из HDFS без удаления исходного файла?

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

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

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

4b9b3361

Ответ 1

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

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

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

row format delimited fields terminated by ','

Ответ 2

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

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

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

Ответ 3

Доступна альтернатива "LOAD DATA", в которой данные не будут перемещены из вашего существующего местоположения источника в хранилище хранилища данных.

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

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

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

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