Hive在HDFS中存储文件的位置?

我想知道如何findHive表和他们所代表的实际HDFS文件(或者说,目录)之间的映射。 我需要直接访问表文件。

Hive将文件存储在HDFS中的位置?

一旦你知道在哪里看,他们存储在HDFS上的位置是相当容易的。 🙂

如果您在浏览器中转到http://NAMENODE_MACHINE_NAME:50070/ ,它应该带您Browse the filesystem链接。

$HIVE_HOME/conf目录中有hive-default.xml和/或具有hive.metastore.warehouse.dir属性的hive-site.xml 。 该值是您在点击Browse the filesystem链接后要导航的位置。

在我的,它是/usr/hive/warehouse 。 一旦我导航到该位置,我看到我的表的名称。 点击一个表名(这只是一个文件夹)将暴露表的分区。 在我的情况下,我目前只有它的date分割。 当我点击这个级别的文件夹时,我会看到文件(更多的分区会有更多的级别)。 这些文件是数据实际存储在HDFS上的地方。

我没有试图直接访问这些文件,我假设可以完成。 如果你正在考虑编辑它,我会非常关心。 :)对我来说 – 我想出一个方法来做我所需要的,而不需要直接访问磁盘上的Hive数据。 如果您需要访问原始数据,则可以使用Hive查询并将结果输出到文件。 这些将具有与HDFS上的文件完全相同的结构(列之间的分隔符等)。 我一直这样的查询,并将其转换为CSV。

有关如何将数据从查询写入磁盘的部分是http://wiki.apache.org/hadoop/Hive/LanguageManual/DML#Writing_data_into_filesystem_from_queries

HTH

Hive表可能不一定存储在仓库中(因为您可以在HDFS上的任何位置创build表)。

您应该使用DESCRIBE FORMATTED <table_name>命令。

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

请注意,分区可能存储在不同的地方,并得到alpha=foo/beta=bar分区的位置,您必须在<table_name>之后添加partition(alpha='foo',beta='bar')

在Hiveterminaltypes中:

 hive> set hive.metastore.warehouse.dir; 

(它会打印path)

在hive cli中键入show create table <table_name>也可能会给出您的configuration单元表的确切位置。

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 / warehouse是所有托pipe表的默认位置。 外部表格可以存储在不同的位置。

describe formatted <table_name>是hive shell命令,可以更一般地使用它来查找与hive表有关的数据的位置。

在Hive中,表格实际上存储在几个地方。 特别是,如果你使用分区(你应该,如果你的表很大或增长),那么每个分区可以有自己的存储。

如果通过默认的HIVE命令创build表格数据或分区,将显示默认的位置:( insert overwrite ... partition ...等):

 describe formatted dbname.tablename 

要显示HIVE表中特定分区的实际位置,请执行以下操作:

 describe formatted dbname.tablename partition (name=value) 

如果您查看文件系统中“应该”存在的表,并且在那里找不到文件,则很可能是通过创build新分区并将该分区指向其他位置来创build表(通常是增量式)。 这是从日常导入等方面build立表格的一种很好的方式,避免了在不同的地方复制文件或将文件存储在不同的地方。

总结一下早先在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,hive-2.1.1下testing