Я хотел бы узнать, как найти сопоставление между таблицами Hive и фактическими файлами HDFS (точнее, каталогами), которые они представляют. Мне нужно напрямую обращаться к файлам таблиц.
Где Hive хранит свои файлы в HDFS?
Я хотел бы узнать, как найти сопоставление между таблицами Hive и фактическими файлами HDFS (точнее, каталогами), которые они представляют. Мне нужно напрямую обращаться к файлам таблиц.
Где Hive хранит свои файлы в HDFS?
Местоположение, которое они хранят на HDFS, довольно легко определить, как только вы знаете, где искать.:)
Если вы перейдете к http://NAMENODE_MACHINE_NAME:50070/
в своем браузере, он перенесет вас на страницу со ссылкой Browse the filesystem
.
В каталоге $HIVE_HOME/conf
есть hive-default.xml
и/или hive-site.xml
, у которого есть свойство hive.metastore.warehouse.dir
. Это значение - это то, куда вы хотите перейти после нажатия ссылки Browse the filesystem
.
В моем, это /usr/hive/warehouse
. Когда я перейду к этому местоположению, я увижу имена моих таблиц. Нажав на имя таблицы (которая является только папкой), вы откроете разделы таблицы. В моем случае, в настоящее время я его разделяю только на date
. Когда я нажимаю на папку на этом уровне, я увижу файлы (больше разделов будет иметь больше уровней). Эти файлы находятся там, где данные фактически хранятся на HDFS.
Я не пытался напрямую обращаться к этим файлам, я предполагаю, что это можно сделать. Я бы взял БОЛЬШУЮ заботу, если вы думаете об их редактировании.:)
Для меня - я бы нашел способ сделать то, что мне нужно, без прямого доступа к данным Hive на диске. Если вам нужен доступ к необработанным данным, вы можете использовать запрос Hive и выводить результат в файл. Они будут иметь ту же структуру (разделитель между столбцами, ect) как файлы на HDFS
. Я делаю такие запросы все время и конвертирую их в CSV.
Раздел о том, как записывать данные из запросов на диск, http://wiki.apache.org/hadoop/Hive/LanguageManual/DML#Writing_data_into_filesystem_from_queries
НТН
Таблицы верстки могут не обязательно храниться на складе (поскольку вы можете создавать таблицы, расположенные где угодно на HDFS).
Вы должны использовать команду DESCRIBE FORMATTED <table_name>
.
hive -S -e "describe formatted <table_name> ;" | grep 'Location' | awk '{ print $NF }'
Обратите внимание, что разделы могут храниться в разных местах и для получения раздела alpha=foo/beta=bar
вам нужно добавить partition(alpha='foo',beta='bar')
после <table_name>
.
В терминале терминала Hive:
hive> set hive.metastore.warehouse.dir;
(он будет печатать путь)
Также очень возможно, что набрав show create table <table_name>
в hive cli, вы получите точное местоположение вашей таблицы hive.
describe formatted <table_name>;
внутри оболочки улья.
Обратите внимание на значение "Местоположение", которое показывает местоположение таблицы.
Если вы посмотрите на файл hive-site.xml, вы увидите что-то вроде этого
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/usr/hive/warehouse </value>
<description>location of the warehouse directory</description>
</property>
/usr/hive/storage - это местоположение по умолчанию для всех управляемых таблиц. Внешние таблицы могут храниться в другом месте.
describe formatted <table_name>
- команда оболочки hive, которая может использоваться в более общем плане для поиска местоположения данных, относящихся к таблице hive.
В Hive таблицы фактически хранятся в нескольких местах. В частности, если вы используете разделы (которые должны, если ваши таблицы очень большие или растут), то каждый раздел может иметь собственное хранилище.
Чтобы показать местоположение по умолчанию, в котором будут созданы данные таблицы или разделы, если вы создадите их с помощью команд по умолчанию по умолчанию: (insert overwrite ... partition ...
и т.д.):
describe formatted dbname.tablename
Чтобы показать фактическое местоположение определенного раздела в таблице HIVE, сделайте следующее:
describe formatted dbname.tablename partition (name=value)
Если вы посмотрите в своей файловой системе, где таблица должна "жить", и вы не найдете там файлов, очень вероятно, что таблица создается (обычно поэтапно), создавая новый раздел и указывая на этот раздел в другом месте. Это отличный способ создания таблиц из таких вещей, как ежедневный импорт от третьих лиц и т.д., Что позволяет избежать копирования файлов или их хранения более одного раза в разных местах.
Подведите итог нескольким пунктам, опубликованным ранее, в hive-site.xml, свойство hive.metastore.warehouse.dir указывает, где находятся файлы, расположенные под файлом HDFS
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
Для просмотра файлов используйте следующую команду:
hadoop fs -ls /user/hive/warehouse
или
http://localhost:50070
Utilities > Browse the file system
or
http://localhost:50070/explorer.html#/
проверено в соответствии с hadoop-2.7.3, hive-2.1.1