2013-05-05 147 views
5

我想通過測量每個讀/寫操作所需的時間來測量每個datanode的吞吐量。閱讀百萬個函數並找出發生的地方是非常令人困惑的。有人可以列出在讀/寫數據塊時進行的一系列調用嗎?我正在使用版本1.0.1。另外,如果已經有一個API在數據節點上測量這個數據,我可以使用這些信息。測量datanode的吞吐量

+1

關於您的賞金評論:如果您將一個節點列入黑名單,它將不再參與羣集,因此吞吐量永遠不會恢復。 – likeitlikeit 2013-05-10 18:29:42

+0

嘿Bug Catcher,我的答案在下面有什麼想法? – Engineiro 2013-05-15 03:01:32

+0

@likeitlikeit我在現有的心跳策略方面做了一些事情:給它三次機會,如果它仍然不好,則將它列入黑名單。無論如何不打算用於實際使用 – 2013-05-16 04:18:47

回答

1

要研究以測量吞吐量的重要類別爲FSDataOutputStream(寫入)和FSDataInputStream(讀取)。

文件閱讀:的第一件事情,一個節點不讀取文件時是FileSystem對象上調用open()。此時,您知道該節點將很快開始閱讀,並且您可以在此通話成功返回之後放置代碼以準備進行測量。在HDFS上調用open()實例化DistributedFileSystem與NameNode進行通信以收集塊位置(根據調用節點的鄰近程度排序)。最後,DistributedFileSystem對象返回FSDataInputStream(「看到」讀取文件),然後包裝DFSInputStream(「看到」讀取塊,處理失敗)。您的測量範圍將在FSDataInputStreamread()close()調用範圍內。

文件寫入:節點將在FileSystem上調用create()。此時進行各種檢查,包括文件許可權,可用性等,但成功完成後將返回一個FSDataOutputStream對象,其包裝DFSOutputStream。當一個人看到連續寫入時,另一個人處理複製因素的一致性(即一次寫入=三次寫入)和失敗。與讀數類似,您的測量範圍將在FSDataInputStreamwrite()close()調用範圍內。

爲了給集羣中的所有節點做這個全球範圍內,你需要重寫這些方法作爲Hadoop的您在羣集共享分發的一部分。

+0

不解釋如何爲每個數據節點聚合統計信息。不能期望客戶端節點分析單個數據節點並將信息發送到名稱節點。無論如何,因爲我的需要已經過去了,我會接受這個答案 – 2013-05-16 04:16:14