2012-06-20 16 views
1

我注意到500個mappers中差不多有3倍的完成時間差。如何檢查映射器的輸入大小(以字節爲單位)?

當我檢查日誌(通過JobTracker Web界面)時,我發現差異主要在第一次泄漏時間(「完成泄漏0」)。

這似乎意味着每個映射器的輸入文件大小差異並不是真正的因素。可能是不同節點之間的性能差異?任何見解/評論將受到歡迎!

+0

你能提供之間的一些詳細信息更快,更慢地運行地圖任務(地圖輸入記錄,地圖輸出記錄,數據和機架位置?) –

回答

1

這實際上取決於你的mapper正在做什麼來調查差異。您必須根據地圖工作職能以及涉及哪些I/O和處理進行調查。

有三個問題可能導致mappers中不同的性能差異。

  1. 本地化但依賴於節點的文件I/O。不同節點類型可以顯示不同的性能特徵。網絡I/O:如果您的映射器從別處獲取數據(例如:從數據庫獲取數據的Sqoop作業),那麼這是更重要的問題,並且通常隨着映射器在不同時間以不同網絡特性執行而變化。計算密集型作業(Mapper性能):通常應該同樣影響所有的mappers,但仍然依賴於節點。

此外,如果您正在執行命令行你的工作,你應該看到類似這樣的輸出(用於網絡I/O)

mapred.JobClient:  SLOTS_MILLIS_MAPS=2958530 
mapred.JobClient:  Total time spent by all reduces waiting after reserving slots (ms)=0 
mapred.JobClient:  Total time spent by all maps waiting after reserving slots (ms)=0 
mapred.JobClient:  Launched map tasks=1 
mapred.JobClient:  SLOTS_MILLIS_REDUCES=0 
mapred.JobClient: FileSystemCounters 
mapred.JobClient:  HDFS_BYTES_READ=87 
mapred.JobClient:  FILE_BYTES_WRITTEN=58294 
mapred.JobClient:  HDFS_BYTES_WRITTEN=248301 
mapred.JobClient: Map-Reduce Framework 
mapred.JobClient:  Map input records=1679 
mapred.JobClient:  Physical memory (bytes) snapshot=267583488 
mapred.JobClient:  Spilled Records=0 
mapred.JobClient:  CPU time spent (ms)=2580 
mapred.JobClient:  Total committed heap usage (bytes)=158334976 
mapred.JobClient:  Virtual memory (bytes) snapshot=927236096 
mapred.JobClient:  Map output records=1679 
mapred.JobClient:  SPLIT_RAW_BYTES=87 
mapreduce.ImportJobBase: Transferred 242.4814 KB in 2,964.2976 seconds (83.7639 bytes/sec) 
mapreduce.ImportJobBase: Retrieved 1679 records. 

您可以從數據處理和寫入看到文件以及傳輸時間。

[編輯:]

有基準可用,可以幫助你檢查出Hadoop集羣的特點:

  1. TestDFSIO
  2. MRBench
+0

謝謝。對於我的情況,它更像是案例1.我正在查看機器規格等。 – kee

+0

@Kee:首先通過寫入和從HDFS寫入本地文件系統。基準。之後,首先嚐試MRBench以瞭解創建和運行無操作map-reducer需要多少時間。 – pyfunc

+0

我明白了。還有一個問題是我沒有在控制檯中看到「mapreduce.ImportJobBase:Transferred ...」輸出。在我的命令行中是否需要使用其他標誌? – kee

相關問題