Hadoop与Spark常用配置参数总结
背景
MapReduce和Spark對外提供了上百個配置參數(shù),用戶可以為作業(yè)定制這些參數(shù)以更快,更穩(wěn)定的運行應(yīng)用程序。本文梳理了最常用的一些MapReduce和Spark配置參數(shù)。
MapReduce重要配置參數(shù)
1. ?資源相關(guān)參數(shù)
(1)?mapreduce.map.memory.mb: 一個Map Task可使用的資源上限(單位:MB),默認(rèn)為1024。如果Map Task實際使用的資源量超過該值,則會被強(qiáng)制殺死。
(2)?mapreduce.reduce.memory.mb: 一個Reduce Task可使用的資源上限(單位:MB),默認(rèn)為1024。如果Reduce Task實際使用的資源量超過該值,則會被強(qiáng)制殺死。
(3)?mapreduce.map.java.opts: Map Task的JVM參數(shù),你可以在此配置默認(rèn)的java heap size等參數(shù), e.g.
“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc” (@taskid@會被Hadoop框架自動換為相應(yīng)的taskid), 默認(rèn)值:?“”
(4)?mapreduce.reduce.java.opts: Reduce Task的JVM參數(shù),你可以在此配置默認(rèn)的java heap size等參數(shù), e.g.
“-Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc”, 默認(rèn)值:?“”
(5)?mapreduce.map.cpu.vcores: 每個Map task可使用的最多cpu core數(shù)目, 默認(rèn)值: 1
(6)?mapreduce.map.cpu.vcores:?每個Reduce task可使用的最多cpu core數(shù)目, 默認(rèn)值: 1
2. ?容錯相關(guān)參數(shù)
(1)?mapreduce.map.maxattempts: 每個Map Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認(rèn)為Map Task運行失敗,默認(rèn)值:4。
(2)?mapreduce.reduce.maxattempts: 每個Reduce Task最大重試次數(shù),一旦重試參數(shù)超過該值,則認(rèn)為Map Task運行失敗,默認(rèn)值:4。
(3)?mapreduce.map.failures.maxpercent: 當(dāng)失敗的Map Task失敗比例超過該值為,整個作業(yè)則失敗,默認(rèn)值為0. 如果你的應(yīng)用程序允許丟棄部分輸入數(shù)據(jù),則該該值設(shè)為一個大于0的值,比如5,表示如果有低于5%的Map Task失敗(如果一個Map Task重試次數(shù)超過mapreduce.map.maxattempts,則認(rèn)為這個Map Task失敗,其對應(yīng)的輸入數(shù)據(jù)將不會產(chǎn)生任何結(jié)果),整個作業(yè)扔認(rèn)為成功。
(4)?mapreduce.reduce.failures.maxpercent: 當(dāng)失敗的Reduce Task失敗比例超過該值為,整個作業(yè)則失敗,默認(rèn)值為0.
(5)?mapreduce.task.timeout: Task超時時間,經(jīng)常需要設(shè)置的一個參數(shù),該參數(shù)表達(dá)的意思為:如果一個task在一定時間內(nèi)沒有任何進(jìn)入,即不會讀取新的數(shù)據(jù),也沒有輸出數(shù)據(jù),則認(rèn)為該task處于block狀態(tài),可能是卡住了,也許永遠(yuǎn)會卡主,為了防止因為用戶程序永遠(yuǎn)block住不退出,則強(qiáng)制設(shè)置了一個該超時時間(單位毫秒),默認(rèn)是300000。如果你的程序?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.”。
3. ?本地運行mapreduce?作業(yè)
設(shè)置以下幾個參數(shù):
mapreduce.framework.name=local
mapreduce.jobtracker.address=local
fs.defaultFS=local
4. ?效率和穩(wěn)定性相關(guān)參數(shù)
(1) mapreduce.map.speculative: 是否為Map Task打開推測執(zhí)行機(jī)制,默認(rèn)為false
(2) mapreduce.reduce.speculative:?是否為Reduce Task打開推測執(zhí)行機(jī)制,默認(rèn)為false
(3) mapreduce.job.user.classpath.first &?mapreduce.task.classpath.user.precedence:當(dāng)同一個class同時出現(xiàn)在用戶jar包和hadoop jar中時,優(yōu)先使用哪個jar包中的class,默認(rèn)為false,表示優(yōu)先使用hadoop jar中的class。 (4) mapreduce.input.fileinputformat.split.minsize: 每個Map Task處理的數(shù)據(jù)量(僅針對基于文件的Inputformat有效,比如TextInputFormat,SequenceFileInputFormat),默認(rèn)為一個block大小,即 134217728。HBase 相關(guān)配置參數(shù)
(1) hbase.rpc.timeout:rpc的超時時間,默認(rèn)60s,不建議修改,避免影響正常的業(yè)務(wù),在線上環(huán)境剛開始配置的是3秒,運行半天后發(fā)現(xiàn)了大量的timeout error,原因是有一個region出現(xiàn)了如下問題阻塞了寫操作:“Blocking updates … memstore size 434.3m is >= than blocking 256.0m size”可見不能太低。
(2) ipc.socket.timeout:socket建立鏈接的超時時間,應(yīng)該小于或者等于rpc的超時時間,默認(rèn)為20s
(3) hbase.client.retries.number:重試次數(shù),默認(rèn)為14,可配置為3
(4) hbase.client.pause:重試的休眠時間,默認(rèn)為1s,可減少,比如100ms
(5) hbase.regionserver.lease.period:scan查詢時每次與server交互的超時時間,默認(rèn)為60s,可不調(diào)整。
Spark?相關(guān)配置參數(shù)
1. ?效率及穩(wěn)定性相關(guān)參數(shù)
建議打開map(注意,在spark引擎中,也只有map和reduce兩種task,spark叫ShuffleMapTask和ResultTask)中間結(jié)果合并及推測執(zhí)行功能:
spark.shuffle.consolidateFiles=true
spark.speculation=trure
2. ?容錯相關(guān)參數(shù)
建議將這些值調(diào)大,比如:
spark.task.maxFailures=8
spark.akka.timeout=300
spark.network.timeout=300
spark.yarn.max.executor.failures=100
原創(chuàng)文章,轉(zhuǎn)載請注明:?轉(zhuǎn)載自董的博客
本文鏈接地址:?http://dongxicheng.org/framework-on-yarn/hadoop-spark-common-parameters/
總結(jié)
以上是生活随笔為你收集整理的Hadoop与Spark常用配置参数总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何高效的阅读Hadoop源代码?Had
- 下一篇: 深入理解Hadoop YARN中的Con