gpt4 book ai didi

hadoop - 数据节点之间的通信如何在 Hadoop 集群中工作?

转载 作者:可可西里 更新时间:2023-11-01 14:34:19 29 4
gpt4 key购买 nike

我是 Hadoop 的新手,非常感谢能帮助我解决这个问题。

集群中 block 的复制由具有 block 副本的各个数据节点处理,但是在不考虑名称节点的情况下如何进行这种传输。

我发现 ssh 是从 slaves 到 master 和 master 到 slaves 的设置,不像 slave 到 slave。

谁能解释一下?

是不是通过hadoop数据传输协议(protocol),比如客户端到DN的通信?

http://blog.cloudera.com/blog/2013/03/how-to-set-up-a-hadoop-cluster-with-network-encryption/

最佳答案

在深入研究 hadoop 源代码后,我发现数据节点使用 BlockSender传输 block 数据的类。实际上,套接字在幕后。

下面是我找到这个的 hack 方法。(这里使用的 hadoop 版本 1.1.2)

  • DataNode 946行是offerService方法,是一个主循环服务。 enter image description here

上面的代码是datanode向namenode发送心跳,主要是告诉namenode是存活的。返回值是datanode将要处理的一些命令。这就是block copy发生的地方。

  • 深入研究 processCommand,我们在第 1160 行 enter image description here

这是一条评论,我们可以毫无疑问地确定 transferBlocks 就是我们想要的。

  • 深入研究 transferBlocks,我们在第 1257 行找到一个私有(private)方法。在该方法的末尾,


new Daemon(new DataTransfer(xferTargets, block, this)).start();

所以,我们知道datanode启动了一个新的线程来做block copy。

  • 查看第 1424 行中的 DataTransfer,检查运行方法。在运行方法接近尾声时,我们发现以下片段:


//发送数据和校验和
blockSender.sendBlock(out, baseStream, null);

从上面的代码我们可以知道BlockSender才是真正的worker。

我的工作已经完成了,更多的就看你自己了,比如BlockReader

关于hadoop - 数据节点之间的通信如何在 Hadoop 集群中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18684589/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com