5

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

4

1 回答 1

1

要研究以测量吞吐量的重要类是FSDataOutputStream用于写入和FSDataInputStream读取。

文件读取:open()节点在读取文件时所做的第一件事是调用FileSystem对象。此时,您知道该节点将很快开始读取,您可以在此调用成功返回后放置代码以准备测量。open()在 HDFS 上调用会实例化DistributedFileSystem与 NameNode 通信的 who,以收集块位置(根据调用节点的接近度排序)。最后,该DistributedFileSystem对象返回FSDataInputStream(“看到”读取文件),该对象依次包装DFSInputStream(“看到”读取块,处理失败)。您的测量值将在read()close()调用范围内FSDataInputStream

文件写入:节点将调用create(). FileSystem此时会进行各种检查,包括文件权限、可用性等,但在成功完成后,它会返回一个FSDataOutputStream包装DFSOutputStream. 同样的概念适用于一个人看到连续写入,另一个处理复制因子的一致性(即一次写入=三次写入)和失败的情况。与读取类似,您的测量范围将在.write()和.close()FSDataInputStream

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

于 2013-05-11T16:48:10.520 回答