mapreduce程序效率的瓶頸在於兩點:
1:計算機性能
2:I/O操作優化
優化無非包括時間性能和空間性能兩個方面,存在一下常見的優化策略:
1:輸入的文件盡量采用大文件
眾多的小文件會導致map數量眾多,每個新的map任務都會造成一些性能的損失。所以可以將一些小文件在進行mapreduce操作前進行一些預處理,整合成大文件,或者直接采用ConbinFileInputFormat來作為輸入方式,此時hadoop會考慮節點和集群的位置信息,已決定將哪些文件打包到同一個單元之中。
2:合理分配map和reduce任務的數量
通過屬性mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum分別可以配置單個節點上map任務和reduce任務的最大數量。
3:壓縮中間數據,減少I/O
4:在map后先進行combine處理,減少I/O
參考資料:《Hadoop 實戰》--機械工業出版社