2013-05-19 90 views
3

我想了解hadoop中的文件系統計數器。瞭解Hadoop文件系統計數器

下面是我跑過的工作的計數器。

在我執行的每個作業,我觀察到的地圖文件讀取的字節是一樣,幾乎等於HDFS讀取的字節。我觀察到地圖寫入的文件字節是映射器讀取的文件字節和hdfs字節的總和。請幫忙!相同的數據是由本地文件和hdfs讀取的,並且都是通過映射階段寫入本地文件系統的?

   Map       

FILE_BYTES_READ 5062341139

HDFS_BYTES_READ 4405881342

FILE_BYTES_WRITTEN 9309466964

HDFS_BYTES_WRITTEN 0

謝謝!

回答

2

這是HDFS分配的總計數器,Map階段,Reduce階段的工作。

這些計數器,就像你觀察者一樣,是文件字節和hdfs字節的總和。 Hadoop使用您的邏輯文件系統HDFS在集羣上共享資源。

+0

我已經justed粘貼在地圖相的計數器。我知道關於文件字節的讀取是相交的。我認爲這是本地文件系統讀取的字節數。但爲什麼它與我在每次運行的工作中讀取的hdfs字節幾乎相同? –

+1

因爲Hadoop會嘗試優化本地讀取,所以它會將您的代碼分發到數據所在的位置。這就是爲什麼你的HDFS讀取是本地讀取。 –

7

所以答案是真的,你注意到的是工作的具體情況。取決於作業,與hdfs相比,映射器/縮減器會將更多或更少的字節寫入本地文件。

在你的映射器的情況下,你有一個從本地和HDFS位置讀取數據的一個類似的量,有就是有沒有問題。您的Mapper代碼恰好需要在讀取HDFS時從本地讀取相同數量的數據。大多數時間Mappers被用來分析大於RAM的數據量,所以看到它可能將從HDFS獲得的數據寫入本地驅動器並不奇怪。從HDFS和本地讀取的字節數並不總是看起來像他們總結到本地寫入大小(他們甚至沒有在你的情況下)。

下面是使用TeraSort示例,具有數據的100G,1個十億鍵/值對。

File System Counters 
      FILE: Number of bytes read=219712810984 
      FILE: Number of bytes written=312072614456 
      FILE: Number of read operations=0 
      FILE: Number of large read operations=0 
      FILE: Number of write operations=0 
      HDFS: Number of bytes read=100000061008 
      HDFS: Number of bytes written=100000000000 
      HDFS: Number of read operations=2976 
      HDFS: Number of large read operations=0 

事情需要注意。從HDFS讀取和寫入的字節數接近100G。這是因爲需要對100G進行排序,並且需要編寫最終的排序文件。還要注意,它需要做大量的本地讀/寫操作來保存和排序數據,數據量是讀取的數據量的2倍和3倍!

作爲最後一點,除非你只想運行一項工作而不關心結果。 HDFS的量字節寫入應該永遠不會爲0,而你的是HDFS_BYTES_WRITTEN 0

+0

感謝您的回覆!這很有用! –