我想通过测量每次读/写操作所需的时间来测量每个datanode的吞吐量。阅读百万个函数并找出其发生的位置非常令人困惑。有人可以列出在读/写数据块时进行的一系列调用吗?我正在使用1.0.1版。或者,如果已经有一个API在datanode上测量它,我可以使用该信息。
答案 0 :(得分:1)
要测量吞吐量的重要课程是写入FSDataOutputStream
和读取FSDataInputStream
。
文件读取:节点在读取文件时所做的第一件事就是在open()
对象上调用FileSystem
。此时,您知道此节点将很快开始读取,并且您可以在此调用成功返回后放置代码以准备测量。在HDFS上调用open()
实例化与NameNode通信的DistributedFileSystem
以收集块位置(根据呼叫节点接近度排序)。最后,DistributedFileSystem
对象返回FSDataInputStream
(“看到”读取文件),后者又包裹DFSInputStream
(“看到”读取块,处理失败)。您的测量结果将限定在read()
的{{1}}和close()
来电中。
文件写入:该节点将在FSDataInputStream
上调用create()
。此时进行各种检查,包括文件权限,可用性等,但在成功完成后,它将返回包裹FileSystem
的{{1}}对象。当看到连续写入时,相同的概念适用于另一个处理复制因子的一致性(即一次写入=三次写入)和失败。与阅读类似,您的测量结果将限定在FSDataOutputStream
上的DFSOutputStream
和write()
调用范围内。
为了对群集中的所有节点全局执行此操作,您需要覆盖这些方法,作为您在群集中共享的Hadoop分发的一部分。