Где Hive хранит файлы в HDFS?


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

где Hive хранит свои файлы в HDFS?

9 62

9 ответов:

расположение они хранятся на HDFS довольно легко выяснить, как только вы знаете, где искать. :)

если вы идете к http://NAMENODE_MACHINE_NAME:50070/ в вашем браузере это должно привести вас к странице с Browse the filesystem ссылка.

на есть hive-default.xml и/или hive-site.xml, которая имеет hive.metastore.warehouse.dir собственность. Это значение, где вы хотите перейти к После нажатия кнопки Browse the filesystem ссылка.

в моем, это /usr/hive/warehouse. Как только я перейду в это место, я смотрите названия моих таблиц. Щелчок по имени таблицы (которая является просто папкой) откроет разделы таблицы. В моем случае, я в настоящее время только он разделен на date. Когда я нажму на папку на этом уровне, я увижу файлы (больше разделов будет иметь больше уровней). Эти файлы, где данные на самом деле хранятся на HDFS.

Я не пытался получить доступ к этим файлам напрямую, я предполагаю, что это может быть сделано. Я был бы очень осторожен, если вы думая о редактировании их. :) По мне - я бы нашел способ сделать то, что мне нужно без прямого доступа к данным куста на диске. Если вам нужен доступ к необработанным данным, Вы можете использовать запрос Hive и вывести результат в файл. Они будут иметь точно такую же структуру (разделитель между столбцами, ect) , как и файлы на HDFS. Я делаю запросы, как это все время и конвертировать их в CSV.

раздел о том, как записать данные из запросов на диск https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries

обновление

начиная с Hadoop 3.0.0-Alpha 1 происходит изменение номеров портов по умолчанию. NAMENODE_MACHINE_NAME: 50070 изменения в NAMENODE_MACHINE_NAME: 9870. Используйте последний, если вы работаете на Hadoop 3.x. полный список изменений порта описан в HDFS-9427

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

вы должны использовать

в улье тип терминала:

hive> set hive.metastore.warehouse.dir;

(он будет печатать путь)

Это также очень возможно, что, набрав show create table <table_name> в улье cli даст вам точное местоположение вашей таблицы улья.

describe formatted <table_name>; внутри улья оболочки.

обратите внимание на значение" Location", которое показывает расположение таблицы.

суммируйте несколько пунктов, опубликованных ранее, в улье-сайт.xml, свойство hive.метастор.склад.dir указывает, где находятся файлы в разделе hadoop 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

Если вы посмотрите на улей-сайт.xml файл вы увидите что-то вроде этого

<property>
   <name>hive.metastore.warehouse.dir</name>
   <value>/usr/hive/warehouse </value>
   <description>location of the warehouse directory</description>
 </property>

/usr/hive / warehouse-это расположение по умолчанию для всех управляемых таблиц. Внешние таблицы могут храниться в другом месте.

describe formatted <table_name> - это команда Hive shell, которая может быть использована более широко для поиска местоположения данных, относящихся к таблице hive.

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

чтобы показать расположение по умолчанию, где будут созданы табличные данные или разделы, если вы создадите их с помощью команд HIVE по умолчанию: (insert overwrite ... partition ... и такие):

describe formatted dbname.tablename

чтобы показать фактическое расположение конкретного раздела В таблице HIVE, вместо этого выполните это:

describe formatted dbname.tablename partition (name=value)

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

другой способ проверить, где хранится конкретная таблица, будет выполнять этот запрос на интерактивный интерфейс улей:

show create table table_name;

здесь имя_таблицы - имя таблицы.

примером для приведенного выше запроса в таблице "customers" может быть что-то вроде этого:

CREATE TABLE `customers`(
  `id` string, 
  `name` string)
COMMENT 'Imported by sqoop on 2016/03/01 13:01:49'
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://quickstart.cloudera:8020/user/hive/warehouse/
   sqoop_workspace.db/customers'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='true', 
  'numFiles'='4', 
  'totalSize'='77', 
  'transient_lastDdlTime'='1456866115')

расположение в приведенном выше примере, где вы должны сосредоточиться. Это ваше местоположение hdfs для улья склад.

не забудьте, если вам нравится это решение. Ура!