6.1 測量MapReduce和環境的性能指標
性能調優的基礎系統的性能指標和實驗數據。依據這些指標和數據,才能找到系統的性能瓶頸。性能指標和實驗數據要通過一系列的工具和過程才能得到。
這部分里,將介紹Hadoop自帶的工具和性能指標。還將捎帶介紹性能監控工具。
6.1.1 作業統計數據抽取工具
這一章中介紹的很多技術都需要從Hadoop中抽取作業和任務的性能指標。有以下三種辦法抽取這些統計數據:
- 用JobTracker UI來查看作業和任務的計數器。
- 用Hadoop CLI(命令行界面)來查看作業和任務計數器。此外,還可以從作業歷史信息中獲得其他性能指標。
- 用本書提供的工具來從作業歷史中抽取性能指標
后兩種工具的優勢在於,既可以看現狀信息,也可以看歷史信息。好了,現在就開始介紹作業歷史信息,以及怎么用Hadoop CLI和本書的工具來從中抽取性能指標。
作業歷史信息和CLI(命令行界面)
每個MapReduce都會生成作業統計數據文件。在文件中有作業和任務的統計信息。查看這些統計信息的最便捷的方法就是使用Hadoop CLI。把這些統計信息抽取到HDFS的output目錄中的過程命令如下:
$ hadoop job -history output Hadoop job: job_201112081615_0181 ===================================== Job tracker host name: localhost Submitted At: 23-Dec-2011 08:55:22 Launched At: 23-Dec-2011 08:55:22 (0sec) Finished At: 23-Dec-2011 08:55:37 (15sec) Status: SUCCESS Counters: |Group Name |Counter name |Map Value |Reduce Value|Total | ------------------------------------------------------------------- |FileSystem |FILE_BYTES_READ |0 |961,831 |961,831 |FileSystem |HDFS_BYTES_READ |696,068 |0 |696,068 |FileSystem |FILE_BYTES_WRITTEN |1,071,837 |1,071,519 |2,143,356 |FileSystem |HDFS_BYTES_WRITTEN |0 |784,221 |784,221 ... Analysis ========= Time taken by best performing map task 2sec Average time taken by map tasks: 2sec Worse performing map tasks: TaskId Timetaken task_201112081615_0181_m_000001 2sec ...
上述輸出信息只是這個命令得到的結果中的一小部分。如果要深入了解,還是親自執行一下命令,看看全部的輸出信息。在上述輸出信息中,包含任務任務執行時間的平均值和最差值。通過這些信息,可以很快了解全體性能指標的大致狀況。那么,作業的歷史信息文件在哪呢?圖6.1說明了它的位置:
作業歷史信息文件的后綴名是jar。盡管很迷惑人,但它實際上是文本文件,由JobHistory類整理而成。如果有興趣,可以用JobHistory類來對這個jar文件作逆向工程,生成一個java形式的文件。這里可以只用Hadoop CLI來從HDFS ouput目錄和NameNode log目錄中抽取作業的統計信息。其實,本書提供的工具也可以完成這些工作。
6.1.2 監控
監控正在運行的MapReduce作業的CPU,內存,網絡等各項性能指標無疑是重要的。了解這些指標可以避免硬件系統的部分閑置和過載。如果硬件系統過載了,那么由此而來的資源競爭,CPU上下文切換,內存頁交換等就會浪費大量時間。如果硬件系統部分閑置了,那就是浪費資源。
要對系統的運行狀態進行自動監控,然后才能夠得到硬件系統的歷史性能信息,並在特定的情況下發出警告信息。現在有很多這方面的工具:
- Linux內置的系統活動收集器和報告工具
- Nagios
- Ganglia。Ganglia是監控集群的開源項目。它提供了富客戶端和圖表工具。並能夠從Hadoop中獲取統計信息。(圖6.2)