創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都做網(wǎng)站、彌勒網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、彌勒網(wǎng)絡(luò)營銷、彌勒企業(yè)策劃、彌勒品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供彌勒建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
MapReduce優(yōu)化方法主要從六個方面考慮:數(shù)據(jù)輸入、Map階段、Reduce階段、IO傳輸、數(shù)據(jù)傾斜問題和常用的調(diào)優(yōu)參數(shù)。
以下參數(shù)是在用戶自己的MR應(yīng)用程序中配置就可以生效[mapred-default.xml]
配置參數(shù) | 參數(shù)說明 |
---|---|
mapreduce.map.memory.mb | 一個MapTask可使用的資源上限(單位:MB),默認為1024。如果MapTask實際使用的資源量超過該值,則會被強制殺死 |
mapreduce.reduce.memory.mb | 一個ReduceTask可使用的資源上限(單位:MB),默認為1024。如果ReduceTask實際使用的資源量超過該值,則會被強制殺死 |
mapreduce.map.cpu.vcores | 每個MapTask可使用的最多cpu core數(shù)目,默認值: 1 |
mapreduce.reduce.cpu.vcores | 每個ReduceTask可使用的最多cpu core數(shù)目,默認值: 1 |
mapreduce.reduce.shuffle.parallelcopies | 每個Reduce去Map中取數(shù)據(jù)的并行數(shù)。默認值是5 |
mapreduce.reduce.shuffle.merge.percent | Buffer中的數(shù)據(jù)達到多少比例開始寫入磁盤。默認值0.66 |
mapreduce.reduce.shuffle.input.buffer.percent | Buffer大小占Reduce可用內(nèi)存的比例。默認值0.7 |
mapreduce.reduce.input.buffer.percent | 指定多少比例的內(nèi)存用來存放Buffer中的數(shù)據(jù),默認值是0.0 |
應(yīng)該在YARN啟動之前就配置在服務(wù)器的配置文件中才能生效[yarn-default.xml]
配置參數(shù) | 參數(shù)說明 |
---|---|
yarn.scheduler.minimum-allocation-mb | 給應(yīng)用程序Container分配的最小內(nèi)存,默認值:1024 |
yarn.scheduler.maximum-allocation-mb | 給應(yīng)用程序Container分配的最大內(nèi)存,默認值:8192 |
yarn.scheduler.minimum-allocation-vcores | 每個Container申請的最小CPU核數(shù),默認值:1 |
yarn.scheduler.maximum-allocation-vcores | 每個Container申請的最大CPU核數(shù),默認值:32 |
yarn.nodemanager.resource.memory-mb | 給Containers分配的最大物理內(nèi)存,默認值:8192 |
Shuffle性能優(yōu)化的關(guān)鍵參數(shù),應(yīng)在YARN啟動之前就配置好[mapred-default.xml]
配置參數(shù) | 參數(shù)說明 |
---|---|
mapreduce.task.io.sort.mb | Shuffle的環(huán)形緩沖區(qū)大小,默認100m |
mapreduce.map.sort.spill.percent | 環(huán)形緩沖區(qū)溢出的閾值,默認80% |
配置參數(shù) | 參數(shù)說明 |
---|---|
mapreduce.map.maxattempts | 每個Map Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認為Map Task運行失敗,默認值:4 |
mapreduce.reduce.maxattempts | 每個Reduce Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認為Map Task運行失敗,默認值:4 |
mapreduce.task.timeout | Task超時時間,經(jīng)常需要設(shè)置的一個參數(shù),該參數(shù)表達的意思為:如果一個Task在一定時間內(nèi)沒有任何進入,即不會讀取新的數(shù)據(jù),也沒有輸出數(shù)據(jù),則認為該Task處于Block狀態(tài),可能是卡住了,也許永遠會卡住,為了防止因為用戶程序永遠Block住不退出,則強制設(shè)置了一個該超時時間(單位毫秒),默認是600000。如果你的程序?qū)γ織l輸入數(shù)據(jù)的處理時間過長(比如會訪問數(shù)據(jù)庫,通過網(wǎng)絡(luò)拉取數(shù)據(jù)等),建議將該參數(shù)調(diào)大,該參數(shù)過小常出現(xiàn)的錯誤提示是“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.” |
HDFS 上每個文件都要在 NameNode 上建立一個索引,這個索引的大小約為 150byte,這樣當(dāng)小文件比較多的時候,就會產(chǎn)生很多的索引文件,一方面會大量占用 NameNode 的內(nèi)存空間,另一方面就是索引文件過大使得索引速度變慢。
小文件的優(yōu)化無非以下幾種方式: