我是 Hadoop 的初学者(我已经学习了几个教程)。我目前正在研究 Hadoop 中的底层复制模型。我想知道模型的外观以及在哪里可以找到代码。
中期结果: 在研究了Hadoop的包之后,我找到了包“org.apache.hadoop.hdfs.server.blockmanagement”。在这里我找到了几个像 BlockManager.java 这样的类。但我已经走到了死胡同。
你能给我一个网站/书籍的引用吗,我可以在其中找到 Hadoop 中的底层复制模型。有没有?如果没有,您有什么建议?
最佳答案
HDFS 架构指南中有一个高级概述:
至于溯源,NameNode会指示一个DataNode将一个block传给其他DataNode。您可以使用以下方法在 DataNode 源中跟踪此命令:
org.apache.hadoop.hdfs.server.datanode.DataNode.processCommand(DatanodeCommand[])
-> org.apache.hadoop.hdfs.server.datanode.DataNode.processCommand(DatanodeCommand)
See the DatanodeProtocol.DNA_TRANSFER command type in the switch
-> org.apache.hadoop.hdfs.server.datanode.DataNode.transferBlocks(Block[], DatanodeInfo[][])
-> org.apache.hadoop.hdfs.server.datanode.DataNode.transferBlock(Block, DatanodeInfo[])
您可以从 NameNode 中发出的命令向后工作:
org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor.getReplicationCommand(int)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.handleHeartbeat(DatanodeRegistration, long, long, long, int, int)
从这里您需要跟踪 pendingReplications
和 neededReplications
实例变量
关于Hadoop block 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614762/