在安装了 Hive 的集群中,如果我想从数据节点放置文件或创建表,会发生什么?
如果我这样做,它会联系namenode并照常做吗
尽管元数据和元数据授权等相关内容由 Hive Metastore 控制,但底层数据仅由 HDFS 控制。因此,NameNode 从一开始就参与其中。
您可以在任何地方运行 hive,不一定在 namenode 上。您也可以在 DataNode 或名称节点以外的实用程序服务器上运行它。
当您在 Hive 中创建表时,将创建与该表对应的目录,并将相应的元数据添加到 NameNode 元数据文件(fsimage
)中。这个新创建的目录的位置在由hive.metastore.warehouse.dir
属性控制的目录中,默认为/user/hive/warehouse
(如果需要,可以更改)。因此,如果您执行以下操作:
hive> create table t1(f1 int, f2 int) row format delimited fields terminated by ',';
它会在你的 HDFS 中创建一个空目录,如下所示:
/user/hive/warehouse/t1
现在,当您使用命令将一些数据加载到此表中时load
,源文件将从源路径移动到/user/hive/warehouse/t1
目录中。这又是一个文件系统系统操作,NameNode 也将参与其中。如果你做这样的事情:
load data inpath '/dir1/in.txt' into table t1;
这会将文件in.txt
从目录移动到涉及 NameNode/dir1
的目录中。/user/hive/warehouse/t1
不知道这是否正是你所需要的。