在内部,在安装了hadoop和hive的集群中,发生了什么?

k5hmc34c  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(322)

我有一个4节点的集群,并且在所有节点中都安装了配置单元(1个名称节点和3个数据节点)。
我正在访问名称节点。当我想放一个文件时会发生什么。在内部,名称节点和数据节点之间发生了什么?
类似地,当我想通过数据节点放置一个文件时会发生什么?
我们在Hive中创建的表存储在哪里?

e1xvtsh3

e1xvtsh31#

我建议看一看这个关于hdfs工作原理的优秀漫画。总结一下发生了什么:
客户机知道块大小(默认为64mb),因此它首先将文件拆分为由该块大小定义的块。
然后,对于每个块,它将向namenode发送一个查询,询问它可以将这个块写入哪些datanodes,以及它要写入多少datanodes(复制因子)。
namenode用一个datanode地址列表进行回复,该列表按与客户机的距离增加排序。
客户机将块数据与其他数据节点的地址一起发送到最近的数据节点。
第一个datanode还将传入数据流传输到客户机提供的列表中最近的datanode,并将列表传递给第二个datanode。
第二个datanode做同样的事情,如果需要的话,还将把数据流传输到另一个datanode。
当输入文件的给定块的所有数据都已写入datanodes时,它们都将通知namenode它们已完成存储该块。
完成datanodes后,客户机将要求对输入文件的其他块执行相同的操作。
当所有的块都这样存储后,客户机将告诉namenode它已经完成了,这样namenode就可以将关于这个文件的元数据持久化到磁盘上。
有点复杂,但协议就是这样的。
在配置单元中创建表时,有关该表的元数据(列、serde、位置等)将进入配置单元元存储库,它是所有配置单元表的中央存储库。这个元存储有几个后端,最常见的是derby或mysql,这是通过属性控制的 javax.jdo.option.ConnectionURL 以及 javax.jdo.option.ConnectionDriverName 在你的Hive里。最终,数据最终在hdfs中的一个目录中由 hive.metastore.warehouse.dir 默认为 /user/hive/warehouse .

相关问题