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

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

63 голосов
/ 20 февраля 2011

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

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

Ответы [ 11 ]

52 голосов
/ 02 мая 2012

Таблицы кустов не обязательно хранятся на складе (поскольку вы можете создавать таблицы, расположенные в любом месте 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>.

52 голосов
/ 01 марта 2011

Местоположение, где они хранятся в 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 и вывести результат в файл.Они будут иметь ту же структуру (разделитель между столбцами и т. Д.), Что и файлы на 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

24 голосов
/ 03 августа 2013

В терминале Hive:

hive> set hive.metastore.warehouse.dir;

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

5 голосов
/ 31 июля 2014

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

3 голосов
/ 11 июля 2017

Суммируйте несколько пунктов, опубликованных ранее, в hive-site.xml, свойство hive.metastore.warehouse.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, куст-2.1.1

3 голосов
/ 24 марта 2015

describe formatted <table_name>; внутри корпуса улья.

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

0 голосов
/ 09 февраля 2019

База данных Hive - это не что иное, как каталоги в HDFS с расширениями .db.

Итак, с хоста Unix или Linux, подключенного к HDFS, выполняйте поиск по типу дистрибутива HDFS:

hdfs dfs -ls -R / 2>/dev/null|grep db или hadoop fs -ls -R / 2>/dev/null|grep db

Вы увидите полный путь к каталогам баз данных .db.Все таблицы будут находиться в соответствующих каталогах базы данных .db.

0 голосов
/ 12 ноября 2018

В песочнице вам нужно перейти в / apps / hive / warehouse / и обычный кластер / user / hive / warehouse

0 голосов
/ 15 марта 2018

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

show create table table_name;

, где имя_таблицы - это имя предметной таблицы.

Примером вышеприведенного запроса к таблице «клиенты» может быть что-то вроде этого:

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')

LOCATION в приведенном выше примере вам следует сосредоточиться. Это ваше местоположение в формате hdf для склада улья.

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

0 голосов
/ 23 февраля 2017

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

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

describe formatted dbname.tablename

Чтобы показать фактическое расположение определенного раздела в таблице HIVE, вместо этого выполните следующие действия:

describe formatted dbname.tablename partition (name=value)

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

...