namenode如何查找空datanode?

时间:2014-01-21 08:13:12

标签: hadoop namespaces client

namenode如何查找空datanode? 当客户端发出写入数据节点的请求时。 通过哪种算法?

1 个答案:

答案 0 :(得分:0)

你的问题的答案非常复杂。在大多数情况下,作为Hadoop的用户甚至是HDFS的管理员,您可能不需要确切地关注NameNode如何确定将其块写入哪个节点。但是,如果您真的很好奇,请查看以下资源:

来自Hadoop权威指南的'Anatomy of a File Write':

  

客户端通过调用create()来创建文件   DistributedFileSystem(图3-3中的步骤1)。 DistributedFileSystem   对namenode进行RPC调用以在其中创建新文件   filesystem的命名空间,没有与之关联的块(步骤2)。   namenode执行各种检查以确保文件不会   已经存在,并且客户端具有正确的权限来创建   文件。如果这些检查通过,则namenode会记录新的检查   文件;否则,文件创建失败并抛出客户端   IOException异常。 DistributedFileSystem返回FSDataOutputStream   让客户端开始写入数据。就像在阅读案例中一样   FSDataOutputStream包装一个处理的DFSOutputStream   与datanodes和namenode的通信。

     

当客户端写入数据时(步骤3),DFSOutputStream将其拆分为   它写入内部队列的数据包称为数据队列。   数据队列由DataStreamer使用,DataStreamer负责   它是通过选择列表来要求namenode分配新块   适合存储副本的数据节点。数据节点列表   一个管道 - 我们假设复制级别为三,所以有   管道中的三个节点。 DataStreamer将数据包流式传输到   管道中的第一个datanode,用于存储数据包和   将它转发到管道中的第二个datanode。同样,   第二个datanode存储数据包并将其转发给第三个(和   最后)管道中的datanode。

如果您想逐步完成,还可以查看最新的稳定ASF Hadoop的源代码: https://github.com/apache/hadoop-common/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java#L346

相关问题