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

时间:2013-06-03 05:22:40

标签: hadoop hive

我有一个4节点集群,我在所有节点中都安装了Hive(1个名称节点和3个数据节点)。

我正在访问名称节点。当我想要放置文件时会发生什么。内部名称节点和数据节点之间发生了什么?

同样,当我想通过数据节点放置文件时会发生什么?

我们在Hive中创建的表在哪里存储?

1 个答案:

答案 0 :(得分:0)

我建议你看看this excellent comic on how HDFS works。为了改变现状:

  • 客户端知道块大小(默认为64Mb),因此它首先将文件拆分为由此块大小定义的块。
  • 然后对于每个块,它将向NameNode发送一个查询,询问它可以写入哪个数据节点以及它要写入多少个数据节点(复制因子)。
  • Namenode回复一个datanode地址列表,按照与客户端的距离增加排序。
  • 客户端将块数据连同其他数据节点的地址一起发送到最近的datanode。
  • 第一个datanode还会将传入数据流式传输到客户端提供的列表中最近的datanode,并将列表传递给第二个datanode。
  • 第二个datanode执行相同的操作,并且如果需要,还会将数据流式传输到另一个datanode。
  • 当所有数据都写入输入文件的给定块的数据节点时,它们都将通知Namenode他们已经完成了存储该块的数据。
  • 完成数据节点后,客户端会要求对输入文件的其他块执行相同操作。
  • 当所有块都像这样存储时,客户端将告诉Namenode它已完成,以便Namenode可以将有关此文件的元数据保存到磁盘。

有点复杂,但这就是协议的样子。

在Hive中创建表时,有关此表的元数据(列,SerDe,位置等)将进入Hive Metastore,它是所有Hive表的中央存储库。这个Metastore有几个后端,最常见的是Derby或MySQL,这是通过Hive配置中的属性javax.jdo.option.ConnectionURLjavax.jdo.option.ConnectionDriverName来控制的。最终,数据最终出现在由hive.metastore.warehouse.dir控制的目录中的HDFS中,默认为/user/hive/warehouse