MapReduce太慢了,记一次对它的调优建议。
- 代碼調優
?? ?代碼調優,主要是mapper和reducer中,針對多次創建的對象,進行代碼提出操作。這個和一般的java程序的代碼調優一樣。
- mapper調優
?? ?mapper調優主要就是就一個目標:減少輸出量。我們可以通過增加combine階段以及對輸出進行壓縮設置進行mapper調優。
?? ?combine介紹:
?? ??? ?實現自定義combine要求繼承reducer類,特點:
?? ??? ?以map的輸出key/value鍵值對作為輸入輸出鍵值對,作用是減少網絡輸出,在map節點上就合并一部分數據。
?? ??? ?比較適合,map的輸出是數值型的,方便進行統計。
?? ?壓縮設置:
?? ??? ?在提交job的時候分別設置啟動壓縮和指定壓縮方式。
- reducer調優
?? ?reducer調優主要是通過參數調優和設置reducer的個數來完成。
?? ?reducer個數調優:
?? ??? ?要求:一個reducer和多個reducer的執行結果一致,不能因為多個reducer導致執行結果異常。
?? ??? ?規則:一般要求在hadoop集群中的執行mr程序,map執行完成100%后,盡量早的看到reducer執行到33%,可以通過命令hadoop job -status job_id或者web頁面來查看。
?? ??? ??? ?原因: map的執行process數是通過inputformat返回recordread來定義的;而reducer是有三部分構成的,分別為讀取mapper輸出數據、合并所有輸出數據以及reduce處理,其中第一步要依賴map的執行,所以在數據量比較大的情況下,一個reducer無法滿足性能要求的情況下,我們可以通過調高reducer的個數來解決該問題。
?? ??? ?優點:充分利用集群的優勢。
?? ??? ?缺點:有些mr程序沒法利用多reducer的優點,比如獲取top n的mr程序。
- runner調優
?? ?runner調優其實就是在提交job的時候設置job參數,一般都可以通過代碼和xml文件兩種方式進行設置。
?? ?1~8詳見ActiveUserRunner(before和configure方法),9詳解TransformerBaseRunner(initScans方法)
?? ?1. mapred.child.java.opts: 修改childyard進程執行的jvm參數,針對map和reducer均有效,默認:-Xmx200m?
?? ?2. mapreduce.map.java.opts: 需改map階段的childyard進程執行jvm參數,默認為空,當為空的時候,使用mapred.child.java.opts。
?? ?3. mapreduce.reduce.java.opts:修改reducer階段的childyard進程執行jvm參數,默認為空,當為空的時候,使用mapred.child.java.opts。
?? ?4. mapreduce.job.reduces: 修改reducer的個數,默認為1??梢酝ㄟ^job.setNumReduceTasks方法來進行更改。
?? ?5. mapreduce.map.speculative:是否啟動map階段的推測執行,默認為true。其實一般情況設置為false比較好??赏ㄟ^方法job.setMapSpeculativeExecution來設置。
?? ?6. mapreduce.reduce.speculative:是否需要啟動reduce階段的推測執行,默認為true,其實一般情況設置為fase比較好??赏ㄟ^方法job.setReduceSpeculativeExecution來設置。
?? ?7. mapreduce.map.output.compress:設置是否啟動map輸出的壓縮機制,默認為false。在需要減少網絡傳輸的時候,可以設置為true。
?? ?8. mapreduce.map.output.compress.codec:設置map輸出壓縮機制,默認為org.apache.hadoop.io.compress.DefaultCodec,推薦使用SnappyCodec(在之前版本中需要進行安裝操作,現在版本不太清楚,安裝參數:http://www.cnblogs.com/chengxin1982/p/3862309.html)
?? ?9. hbase參數設置
?? ??? ?由于hbase默認是一條一條數據拿取的,在mapper節點上執行的時候是每處理一條數據后就從hbase中獲取下一條數據,通過設置cache值可以一次獲取多條數據,減少網絡數據傳輸。
總結
以上是生活随笔為你收集整理的MapReduce太慢了,记一次对它的调优建议。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kafka消费速度跟不上生产速度的解决方
- 下一篇: 大剑无锋之研发笔试题(一)