Копирует ли данные Hive's Create External Table? - PullRequest
3 голосов
/ 29 мая 2020

У меня есть приложение Spark, которое записывает выходные файлы в формате Avro. Теперь я хотел бы, чтобы эти данные были доступны в Hive, потому что приложение, которое будет использовать эти данные, может делать это только через таблицу Hive.

здесь описано, что это можно сделать, используя CREATE EXTERNAL TABLE в Hive. Теперь у меня вопрос, насколько эффективен метод CREATE EXTERNAL TABLE. Будет ли он копировать все данные Avro в другое место на HDFS для работы или просто создает metainfo, которые можно использовать для запроса данных Avro?

Кроме того, что, если я хочу продолжать добавлять новые данные Avro в эту таблицу. Могу ли я один раз создать такую ​​внешнюю таблицу, а затем продолжать добавлять в нее новые данные Avro? А что, если кто-то запрашивает данные во время их обновления. Разрешает ли это транзакции atomi c?

1 Ответ

1 голос
/ 29 мая 2020
Оператор

Hive CREATE TABLE не копирует никаких данных. Данные остаются в месте, указанном в таблице DDL. CREATE TABLE создает метаданные только в хранилище метаданных Hive.

Вы можете добавить файлы позже в том же месте.

HDFS не позволяет обновлять. Вы можете удалять файлы и помещать новые файлы. select вернет пустой набор данных посередине между удалением и помещением новых файлов.

Если это файловая система S3, и вы переписываете одни и те же файлы или удаляете их, то в конечном итоге может возникнуть проблема согласованности (файл не найден, и т.д. c).

Также, когда вы напрямую управляете файлами , Статистика Hive не обновляется, поскольку Hive не знает, что вы изменили данные.

Hive не знает, изменили ли вы файлы, потому что файловая система и Hive слабо связаны. У Hive есть метаданные с определением схемы таблицы, сервером и местоположением, статистикой и т. Д. c. И он остается таким же после того, как вы изменили данные в расположении таблицы.

Транзакции Hive - это atomi c. Если вы вставляете или перезаписываете данные с помощью HiveQL, он записывает данные во временное местоположение, и только в случае успешного выполнения команды файлы перемещаются в местоположение таблицы (старые файлы удаляются в случае перезаписи). Если SQL терпит неудачу, данные остаются такими, какими они были до команды.

Но поскольку Hive не копирует данные из расположения таблицы в какое-то внутреннее управляемое хранилище, если вы манипулируете файлами, когда Hive их читает, это будет исключением в процессе куста. Hive не может заблокировать таблицу во время работы с файлами, потому что Hive об этом не знает. Файловая система довольно отделена от улья, и вы можете делать все в файловой системе, как будто улья вообще не существует.

Прочтите также о режиме ACID Hive: Транзакции Hive

Также прочтите о различиях между управляемыми и внешними таблицами в Hive .

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