所以我正在攻读CCDH认证,我在网上发现了一些示例问题,但说实话,我认为它们都不准确,所以我想在这里查看。
以下哪项描述了HDFS上的最佳读取操作?
一个。客户端在NameNode中查询块位置。 NameNode返回 阻止客户端的位置。客户端从DataNode中读取数据目录。
B中。客户端并行查询所有DataNode。包含请求的DataNode 数据直接响应客户端。客户端直接从DataNode读取数据。
℃。客户端联系NameNode以获取块位置。 NameNode然后 查询DataNodes的块位置。 DataNodes响应NameNode, 并且NameNode将客户端重定向到保存所请求数据的DataNode 块(多个)。然后,客户端直接从DataNode读取数据。
d。客户端联系NameNode以获取块位置。 NameNode联系人 保存请求的数据块的DataNode。数据从DataNode传输 到NameNode,然后从NameNode到客户端。
我肯定知道B和D.根据文档,正确的答案是C.但我一直认为NameNode已经在RAM中有块位置,并且不需要查询datanode?所以我希望答案是正确答案。我错了还是文件错了?
答案 0 :(得分:3)
NameNode不查询DataNode以获取块位置。相反,它会在DN发送的block reports
的帮助下动态构建它。请记住,DN会在每隔几秒钟后向NN发送阻止报告以及心跳。
因此,正确的答案应该是选项A.
答案 1 :(得分:0)
namenode很少与datanode通信的原因是,它的主要工作是向客户端提供读/写请求并从datanode更新元数据,因此它不会浪费资源和时间从数据节点获取数据。而datanode与namenode通信,namenode是基于套接字的简单通信,用于提供心跳和阻止报告。请参阅http://hashprompt.blogspot.com/2014/05/multi-node-hadoop-cluster-on-oracle.html。
答案 2 :(得分:0)
正确的答案应该是选项A.
NN->客户端 - NN存储所有文件名,在内存中阻止位置,并使用所需信息响应客户端。
NN-> DN - 这似乎无效,因为在Hadoop(廉价硬件)中,DN有时在群集中不可用(由于网络或硬件问题),因此NN不应该依赖DD来获取metdata。
希望这有帮助。