Основная цель MetaStore в Hive?

Я немного запутался в назначении MetaStore. Когда вы создаете таблицу в улье:

CREATE TABLE <table_name> (column1 data_type, column2 data_type);
LOAD DATA INPATH <HDFS_file_location> INTO table managed_table;

Итак, я знаю, что эта команда берет содержимое файла в HDFS и создает его форму MetaData и сохраняет ее в MetaStore (включая типы столбцов, имена столбцов, место, где оно находится в HDFS, и т. Д. Каждой строки в HDFS. файл). Фактически он не перемещает данные из HDFS в Hive.

Но какова цель хранения этих метаданных?

Когда я подключаюсь к Hive с помощью Spark SQL, например, MetaStore не содержит фактической информации в HDFS, а только MetaData. Значит, MetaStore просто используется Hive для синтаксического анализа и компиляции запроса HiveQL и для создания заданий MapReduce?


person Community    schedule 31.01.2018    source источник


Ответы (2)


Metastore предназначен для хранения схемы (определения таблиц, включая расположение в HDFS, serde, столбцы, комментарии, типы, определения разделов, представления, права доступа и т. Д.) И статистики. Нет такой операции, как перемещение данных из HDFS в Hive, потому что данные таблиц Hive хранятся в HDFS (или другой совместимой файловой системе, такой как S3). Вы можете определить новую таблицу или даже несколько таблиц поверх некоторого места в HDFS и поместить в него файлы. Вы можете изменить существующее расположение таблицы или расположение раздела, вся эта информация хранится в хранилище метаданных, поэтому Hive знает, как получить доступ к данным. Таблица - это логический объект, определенный в хранилище метаданных, а сами данные - это просто файлы в каком-то месте в HDFS.

См. Также этот ответ о потоке выполнения запросов Hive (высокий уровень): https://stackoverflow.com/a/45587873/2700344

person leftjoin    schedule 31.01.2018
comment
Но когда вы создаете внутреннюю таблицу, разве данные из файла в HDFS не перемещаются в каталог Hive Warehouse: / user / inventory / hive? - person ; 01.02.2018
comment
@ToothyRel Когда вы удаляете свою управляемую таблицу, данные также будут удалены. В этом вся разница между внешними и управляемыми таблицами. Когда вы удалите внешнюю таблицу, данные останутся. Итак, создавайте управляемые таблицы, если вы не хотите беспокоиться об удалении данных после того, как таблица вам больше не нужна. Также есть временные таблицы, они будут автоматически удалены по окончании сеанса. Управляемую таблицу также можно создать поверх любого места в HDFS. - person leftjoin; 01.02.2018
comment
Поэтому, если я создам управляемую таблицу и свяжу файл с этой конкретной управляемой таблицей, единственное, что будет в Hive MetaStore, - это метаданные о таблице (например, расположение в HDFS, serde, столбцы, комментарии, типы, определения разделов, представления, права доступа и т. д.). Но данные из местоположения HDFS не будут перемещены в хранилище Hive под /user/warehouse/hive? - person ; 01.02.2018
comment
@ToothyRel Правильно, данные не будут перемещаться, управляться или не управляться, не имеет значения. /user/warehouse/hive/table_name это может быть место по умолчанию, в котором будут храниться данные, если вы вставите их с помощью SQL и если вы не определили другое место в DDL таблицы / раздела. В HDFS данные таблицы или раздела - это папка, в которой хранятся файлы. - person leftjoin; 01.02.2018
comment
Хорошо, спасибо, это имеет смысл. Таким образом, из фактического местоположения HDFS ничего не перемещается. Но в чем смысл каталога /user/warehouse/hive? Если я создам управляемую таблицу Employee и скажу LOAD DATA INPATH /some/path/in/hdfs INTO TABLE Employee, то эти данные будут КОПИРОВАТЬ в каталог user/warehouse/hive/Employee. Но фактические данные из /some/path/in/hdfs все еще находятся в HDFS, так зачем даже копировать их в каталог user/warehouse/hive/Employee? - person ; 01.02.2018
comment
Команда LOAD перемещает данные в каталог таблиц, потому что данные должны находиться в каталоге таблиц, чтобы они были доступны из Hive SQL. Вы также можете перемещать файлы с помощью команды cp. У каждого раздела может быть своя папка. Проще говоря, таблица Hive - это папка + метаданные таблицы. - person leftjoin; 01.02.2018
comment
Ох, хорошо, поэтому для управляемого или неуправляемого данные из местоположения файла в HDFS должны быть перемещены в указанное вами место, чтобы Hive SQL работал и имел к нему доступ. - person ; 01.02.2018
comment
Данные таблицы должны находиться в ее папке. Вы можете смонтировать таблицу поверх какой-либо папки, не перемещая данные, или вы можете поместить данные в свернутую таблицу, используя команды load, cp / distcp или mv, или вставку SQL и т. Д. Таблица / раздел - это физическая папка. и данные должны быть в этой папке, чтобы быть доступными. - person leftjoin; 01.02.2018

Hive выполняет операции схемы при чтении, что означает, что для обработки данных в некоторой структурированной манере (то есть в виде объекта, подобного таблице), макет упомянутых данных должен быть обобщен в реляционной структуре.

берет содержимое файла в HDFS и создает его форму метаданных

Насколько мне известно, при создании таблицы на самом деле никакие файлы не читаются.

SparkSQL подключается к хранилищу метаданных напрямую. И Spark, и HiveServer имеют собственные парсеры запросов. Это не часть хранилища метаданных. Задания MapReduce / Tez / Spark также не обрабатываются хранилищем метаданных. Это просто реляционная база данных. Если это Mysql, Postgres или Oracle, вы можете легко подключиться к нему и проверить содержимое. По умолчанию и Hive, и Spark используют встроенную базу данных Derby.

person OneCricketeer    schedule 31.01.2018