HDFS アーキテクチャ ガイドに高レベルの概要があります。
ソースのトレースに関しては、NameNode は DataNode にブロックを他の 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
インスタンス変数をトレースする必要があります