wake-up-neo.com

Wo speichert Hive Dateien in HDFS?

Ich möchte wissen, wie Sie die Zuordnung zwischen Hive-Tabellen und den tatsächlichen HDFS-Dateien (bzw. Verzeichnissen) finden, die sie repräsentieren. Ich muss direkt auf die Tabellendateien zugreifen.

Wo speichert Hive seine Dateien in HDFS?

63
Yuval

Der Ort, an dem sie auf dem HDFS gespeichert sind, ist ziemlich einfach zu bestimmen, sobald Sie wissen, wo Sie suchen müssen. :)

Wenn Sie in Ihrem Browser http://NAMENODE_MACHINE_NAME:50070/ aufrufen, sollten Sie zu einer Seite mit einem Browse the filesystem-Link gelangen.

Im Verzeichnis $Hive_HOME/conf befindet sich der Code Hive-default.xml und/oder Hive-site.xml mit der Eigenschaft Hive.metastore.warehouse.dir. Mit diesem Wert möchten Sie nach dem Klicken auf den Link Browse the filesystem navigieren.

In meinem ist es /usr/Hive/warehouse. Sobald ich zu diesem Ort navigiere, sehe ich die Namen meiner Tabellen. Durch Klicken auf einen Tabellennamen (der nur ein Ordner ist) werden die Partitionen der Tabelle angezeigt. In meinem Fall habe ich es derzeit nur auf date partitioniert. Wenn ich auf den Ordner auf dieser Ebene klicke, werden mir Dateien angezeigt (mehr Partitionierung wird mehr Ebenen haben). In diesen Dateien werden die Daten tatsächlich auf dem HDFS gespeichert.

Ich habe nicht versucht, direkt auf diese Dateien zuzugreifen, ich gehe davon aus, dass dies möglich ist. Ich würde GROSS aufpassen, wenn Sie daran denken, sie zu bearbeiten. Für mich würde ich einen Weg finden, was ich tun muss, ohne direkten Zugriff auf die Hive-Daten auf der Festplatte zu haben. Wenn Sie Zugriff auf Rohdaten benötigen, können Sie eine Hive-Abfrage verwenden und das Ergebnis in eine Datei ausgeben. Diese haben genau dieselbe Struktur (Spaltenteilung, ect) wie die Dateien in der HDFS. Ich mache solche Anfragen immer wieder und konvertiere sie in CSVs.

Der Abschnitt zum Schreiben von Daten von Abfragen auf die Festplatte lautet https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueries

UPDATE

Seit Hadoop 3.0.0 - Alpha 1 ändern sich die Standard-Portnummern. NAMENODE_MACHINE_NAME: 50070 ändert sich in NAMENODE_MACHINE_NAME: 9870. Verwenden Sie Letzteres, wenn Sie auf Hadoop 3.x laufen. Die vollständige Liste der Portänderungen ist in HDFS-9427 beschrieben.

51
QuinnG

Hive-Tabellen werden möglicherweise nicht unbedingt in einem Warehouse gespeichert (da Sie Tabellen an beliebiger Stelle im HDFS erstellen können).

Sie sollten den Befehl DESCRIBE FORMATTED <table_name> verwenden.

Hive -S -e "describe formatted <table_name> ;" | grep 'Location' | awk '{ print $NF }'

Bitte beachten Sie, dass Partitionen möglicherweise an verschiedenen Orten gespeichert werden und um den Speicherort der alpha=foo/beta=bar-Partition abzurufen, müssen Sie partition(alpha='foo',beta='bar') nach <table_name> hinzufügen.

52
Just

In Hive-Terminaltyp:

Hive> set Hive.metastore.warehouse.dir;

(es wird der Pfad gedruckt)

24
rajnish

Es ist auch sehr wahrscheinlich, dass Sie durch Eingabe von show create table <table_name> im Hive-Cli die genaue Position Ihrer Hive-Tabelle angeben.

5

Fassen Sie einige zuvor zusammengestellte Punkte zusammen..... In Hive-site.xml. Die Eigenschaft Hive.metastore.warehouse.dir gibt an, wo sich die Dateien unter hadoop HDFS befanden

<property>
   <name>Hive.metastore.warehouse.dir</name>
   <value>/user/Hive/warehouse</value>
</property>

Verwenden Sie diesen Befehl, um Dateien anzuzeigen:

hadoop fs -ls /user/Hive/warehouse

oder 

http://localhost:50070
Utilities > Browse the file system
or
http://localhost:50070/Explorer.html#/

getestet unter hadoop-2.7.3, Hive-2.1.1

3
Jonathan L

describe formatted <table_name>; in Hive Shell. 

Beachten Sie den Wert "Location", der die Position der Tabelle angibt.

3
smishra

In Hive werden Tabellen tatsächlich an einigen Stellen gespeichert. Wenn Sie Partitionen verwenden (was Sie sollten, wenn Ihre Tabellen sehr groß sind oder wachsen), kann jede Partition über einen eigenen Speicher verfügen.

So zeigen Sie den Standardspeicherort an, an dem Tabellendaten oder -partitionen erstellt werden, wenn Sie sie über Standardbefehle für die Strukturbibliothek erstellen: (insert overwrite ... partition ... und solche):

describe formatted dbname.tablename

Führen Sie stattdessen Folgendes aus, um den tatsächlichen Speicherort einer bestimmten Partition in einer Hive-Tabelle anzuzeigen:

describe formatted dbname.tablename partition (name=value)

Wenn Sie in Ihrem Dateisystem nachsehen, wo eine Tabelle "leben" soll und Sie dort keine Dateien finden, ist es sehr wahrscheinlich, dass die Tabelle erstellt wird (normalerweise inkrementell), indem Sie eine neue Partition erstellen und diese Partition an einen anderen Speicherort verweisen. Dies ist eine großartige Möglichkeit, Tabellen aus Dingen wie dem täglichen Importieren von Drittanbietern usw. zu erstellen, wodurch vermieden werden muss, dass die Dateien kopiert oder mehrfach an unterschiedlichen Orten gespeichert werden.

0
Jon Watte

Eine andere Möglichkeit, um zu überprüfen, wo eine bestimmte Tabelle gespeichert ist, besteht darin, diese Abfrage auf der interaktiven Schnittstelle Hive auszuführen:

show create table table_name;

dabei ist table_name der Name der Subjekttabelle.

Ein Beispiel für die obige Abfrage in der Tabelle "Kunden" lautet etwa so:

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

LOCATIONIn dem obigen Beispiel sollten Sie sich darauf konzentrieren. Dies ist Ihre HDFS-Position für das Hive-Lager.

Vergessen Sie nicht zu mögen, wenn Sie diese Lösung mögen. Prost!

0
Kireet Bhat

Wenn Sie sich die Datei Hive-site.xml ansehen, werden Sie so etwas sehen

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

/ usr/Hive/warehouse ist der Standardspeicherort für alle verwalteten Tabellen. Externe Tabellen können an einem anderen Speicherort gespeichert werden. 

describe formatted <table_name> ist der Hive-Shell-Befehl, der allgemeiner verwendet werden kann, um den Ort von Daten zu suchen, die zu einer Hive-Tabelle gehören.

0
balboa

Die Hive-Datenbank ist nichts anderes als Verzeichnisse in HDFS mit der Erweiterung .db.

Suchen Sie also von einem mit HDFS verbundenen Unix- oder Linux-Host nach folgendem Typ der HDFS-Verteilung:

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

Sie sehen den vollständigen Pfad der .db-Datenbankverzeichnisse. Alle Tabellen befinden sich in den entsprechenden Datenbankverzeichnissen .db.

0
Bhaskar Ghosh

In der Sandbox müssen Sie nach/apps/Hive/warehouse/und normalem Cluster/user/Hive/warehouse gehen

0
Tutu Kumari