如果我在 HDFS 之上构建 Hive,是否需要在处理之前将所有文件放入 hive/warehouse 文件夹?我可以通过 hive 查询 hdfs 中的任何文件吗?如何?
2 回答
您无需执行任何特殊操作即可在现有 HDFS 集群上运行 Hive。这得益于 Hive 的架构。Hive 默认在 HDFS 上运行。
在处理它们之前,我是否需要将所有文件放入 hive/warehouse 文件夹?
您也不必这样做。
当您创建 Hive 表并使用LOAD命令将文件中的数据加载到其中时,基本文件会自动移动到 Hive 仓库中。你不必明确地做任何事情。但这需要付出代价。如果您删除这样的表格,您的文件将被删除。这些类型的文件在 Hive 术语中称为托管表。
为了克服这个问题,您可以使用 Hive 支持的另一种类型的表,即外部表。当您创建外部表并将数据加载到其中时,基本文件不会移动到仓库中。只有与该表关联的元数据被添加到 Hive元存储中。当您删除此表时,只有元数据会从元存储中删除,而不会删除基本文件。您只需在创建外部表时通过LOCATION子句指定基本文件的位置。
我可以通过 hive 查询 hdfs 中的任何文件吗?如何?
是的。创建一个外部表,它将在LOCATION子句的帮助下引用此文件。然后,您可以像查询任何其他 Hive 表一样查询此文件中的数据。
希望这能回答您的问题。
当您在 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;