Hadoop Hive查询来自hdfs的文件

时间:2013-09-18 18:22:55

标签: hbase hive hdfs

如果我在HDFS之上构建Hive,在处理之前是否需要将所有文件放入hive / warehouse文件夹?我可以通过hive查询hdfs中的任何文件吗?怎么样?

2 个答案:

答案 0 :(得分:2)

为了在现有HDFS群集上运行Hive,您无需执行任何特殊操作。这是通过Hive的架构实现的。默认情况下,Hive在HDFS上运行。

在处理之前是否需要将所有文件放入hive / warehouse文件夹?

您也不必这样做。

创建Hive表并使用 LOAD 命令将文件中的数据加载到其中时,基本文件自动会被移动到Hive仓库中。您不必明确地做任何事情。但这带来了成本。如果删除这样的表,您的文件将被删除。这些类型的文件在Hive术语中称为托管表

为了克服这个问题,您可以使用Hive支持的其他类型的表,外部表。当您创建外部表并将数据加载到其中时,基本文件不会被移动进入仓库。只需将与该表关联的元数据添加到Hive Metastore 中。当您删除此表时,只有元数据从Metastore中删除而不删除基本文件。您只需在创建外部表时通过 LOCATION 子句指定基本文件的位置。

我可以通过hive查询hdfs中的任何文件吗?怎么样?

是。创建一个外部表,在 LOCATION 子句的帮助下引用该文件。然后,您可以像查看任何其他Hive表一样查询此文件中的数据。

希望这可以回答您的问题。

答案 1 :(得分:1)

在Hive中创建表时,默认情况下Hive将管理数据,这意味着Hive会将数据移动到其仓库目录中。或者,您可以创建一个external table,告诉Hive引用仓库目录外现有位置的数据。

CREATE EXTERNAL TABLE external_table (dummy STRING)
LOCATION '/user/external_table';
LOAD DATA INPATH '/user/data.txt' INTO TABLE external_table;