测量datanode的吞吐量

时间:2013-05-05 22:55:23

标签: hadoop hdfs

我想通过测量每次读/写操作所需的时间来测量每个datanode的吞吐量。阅读百万个函数并找出其发生的位置非常令人困惑。有人可以列出在读/写数据块时进行的一系列调用吗?我正在使用1.0.1版。或者,如果已经有一个API在datanode上测量它,我可以使用该信息。

1 个答案:

答案 0 :(得分:1)

要测量吞吐量的重要课程是写入FSDataOutputStream和读取FSDataInputStream

文件读取:节点在读取文件时所做的第一件事就是在open()对象上调用FileSystem。此时,您知道此节点将很快开始读取,并且您可以在此调用成功返回后放置代码以准备测量。在HDFS上调用open()实例化与NameNode通信的DistributedFileSystem以收集块位置(根据呼叫节点接近度排序)。最后,DistributedFileSystem对象返回FSDataInputStream(“看到”读取文件),后者又包裹DFSInputStream(“看到”读取块,处理失败)。您的测量结果将限定在read()的{​​{1}}和close()来电中。

文件写入:该节点将在FSDataInputStream上调用create()。此时进行各种检查,包括文件权限,可用性等,但在成功完成后,它将返回包裹FileSystem的{​​{1}}对象。当看到连续写入时,相同的概念适用于另一个处理复制因子的一致性(即一次写入=三次写入)和失败。与阅读类似,您的测量结果将限定在FSDataOutputStream上的DFSOutputStreamwrite()调用范围内。

为了对群集中的所有节点全局执行此操作,您需要覆盖这些方法,作为您在群集中共享的Hadoop分发的一部分。