說明
最近關(guān)于YARN的配置擎勘,尤其是調(diào)試日志的信息惫周,總是記不住餐茵,留個(gè)記錄,方便以后查看辆苔。
轉(zhuǎn)自董西成的博客,在此感謝董西成老師的分享算灸。
如需轉(zhuǎn)載,請(qǐng)注明出處驻啤,鏈接列表如下
RM與NM相關(guān)參數(shù)
權(quán)限與日志聚集相關(guān)參數(shù)
MapReduce相關(guān)參數(shù)
Fair Scheduler相關(guān)參數(shù)
Capacity Scheduler相關(guān)參數(shù)
RM與NM相關(guān)參數(shù)
ResourceManager
參數(shù)名稱 | 作用 | 默認(rèn)值 |
---|---|---|
yarn.resourcemanager.address | ResourceManager 對(duì)客戶端暴露的地址菲驴。客戶端通過該地址向RM提交應(yīng)用程序街佑,殺死應(yīng)用程序等谢翎。 | ${yarn.resourcemanager.hostname}:8032 |
yarn.resourcemanager.scheduler.address | ResourceManager 對(duì)ApplicationMaster暴露的訪問地址捍靠。ApplicationMaster通過該地址向RM申請(qǐng)資源、釋放資源等森逮。 | ${yarn.resourcemanager.hostname}:8030 |
yarn.resourcemanager.resource-tracker.address | ResourceManager 對(duì)NodeManager暴露的地址.榨婆。NodeManager通過該地址向RM匯報(bào)心跳,領(lǐng)取任務(wù)等褒侧。 | ${yarn.resourcemanager.hostname}:8031 |
yarn.resourcemanager.admin.address | ResourceManager 對(duì)管理員暴露的訪問地址良风。管理員通過該地址向RM發(fā)送管理命令等。 | ${yarn.resourcemanager.hostname}:8033 |
yarn.resourcemanager.webapp.address | ResourceManager對(duì)外web ui地址闷供。用戶可通過該地址在瀏覽器中查看集群各類信息烟央。 | ${yarn.resourcemanager.hostname}:8088 |
yarn.resourcemanager.scheduler.class | 啟用的資源調(diào)度器主類。目前可用的有FIFO歪脏、Capacity Scheduler和Fair Scheduler疑俭。 | org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler |
yarn.resourcemanager.resource-tracker.client.thread-count | 處理來自NodeManager的RPC請(qǐng)求的Handler數(shù)目。 | 50 |
yarn.resourcemanager.scheduler.client.thread-count | 處理來自ApplicationMaster的RPC請(qǐng)求的Handler數(shù)目婿失。 | 50 |
yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb | 單個(gè)可申請(qǐng)的最小/最大內(nèi)存資源量钞艇。比如設(shè)置為1024和3072,則運(yùn)行MapRedce作業(yè)時(shí)豪硅,每個(gè)Task最少可申請(qǐng)1024MB內(nèi)存哩照,最多可申請(qǐng)3072MB內(nèi)存。 | 1024/8192 |
yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores | 單個(gè)可申請(qǐng)的最小/最大虛擬CPU個(gè)數(shù)懒浮。比如設(shè)置為1和4飘弧,則運(yùn)行MapRedce作業(yè)時(shí),每個(gè)Task最少可申請(qǐng)1個(gè)虛擬CPU砚著,最多可申請(qǐng)4個(gè)虛擬CPU次伶。什么是虛擬CPU,可閱讀我的這篇文章:“YARN 資源調(diào)度器剖析”稽穆。 | 1/32 |
yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path | NodeManager黑白名單学少。如果發(fā)現(xiàn)若干個(gè)NodeManager存在問題,比如故障率很高秧骑,任務(wù)運(yùn)行失敗率高,則可以將之加入黑名單中扣囊。注意乎折,這兩個(gè)配置參數(shù)可以動(dòng)態(tài)生效。(調(diào)用一個(gè)refresh命令即可) | "" |
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms | NodeManager心跳間隔 | 1000(毫秒) |
NodeManager
參數(shù)名稱 | 作用 | 默認(rèn)值 |
---|---|---|
yarn.nodemanager.resource.memory-mb | NodeManager總的可用物理內(nèi)存侵歇。注意骂澄,該參數(shù)是不可修改的,一旦設(shè)置惕虑,整個(gè)運(yùn)行過程中不可動(dòng)態(tài)修改坟冲。另外磨镶,該參數(shù)的默認(rèn)值是8192MB,即使你的機(jī)器內(nèi)存不夠8192MB健提,YARN也會(huì)按照這些內(nèi)存來使用(傻不傻琳猫?),因此私痹,這個(gè)值通過一定要配置脐嫂。不過,Apache已經(jīng)正在嘗試將該參數(shù)做成可動(dòng)態(tài)修改的紊遵。 | 8192 |
yarn.nodemanager.vmem-pmem-ratio | 每使用1MB物理內(nèi)存账千,最多可用的虛擬內(nèi)存數(shù)。 | 2.1 |
yarn.nodemanager.resource.cpu-vcores | NodeManager總的可用虛擬CPU個(gè)數(shù)暗膜。 | 8 |
yarn.nodemanager.local-dirs | 中間結(jié)果存放位置匀奏,類似于1.0中的mapred.local.dir。注意学搜,這個(gè)參數(shù)通常會(huì)配置多個(gè)目錄娃善,已分?jǐn)偞疟PIO負(fù)載。 | ${hadoop.tmp.dir}/nm-local-dir |
yarn.nodemanager.log-dirs | 日志存放地址(可配置多個(gè)目錄)恒水。 | ${yarn.log.dir}/userlogs |
yarn.nodemanager.log.retain-seconds | NodeManager上日志最多存放時(shí)間(不啟用日志聚集功能時(shí)有效)会放。 | 10800(3小時(shí)) |
yarn.nodemanager.aux-services | NodeManager上運(yùn)行的附屬服務(wù)。需配置成mapreduce_shuffle钉凌,才可運(yùn)行MapReduce程序 | 默認(rèn)值:"" |
權(quán)限與日志聚集
日志聚集
參數(shù)名稱 | 作用 | 默認(rèn)值 |
---|---|---|
yarn.log-aggregation-enable | 是否啟用日志聚集功能咧最。 | false |
yarn.log-aggregation.retain-seconds | 在HDFS上聚集的日志最多保存多長時(shí)間。 | -1 |
yarn.log-aggregation.retain-check-interval-seconds | 多長時(shí)間檢查一次日志御雕,并將滿足條件的刪除矢沿,如果是0或者負(fù)數(shù),則為上一個(gè)值的1/10酸纲。 | -1 |
yarn.nodemanager.remote-app-log-dir | 當(dāng)應(yīng)用程序運(yùn)行結(jié)束后捣鲸,日志被轉(zhuǎn)移到的HDFS目錄(啟用日志聚集功能時(shí)有效)。 | /tmp/logs |
yarn.log-aggregation.retain-seconds | 遠(yuǎn)程日志目錄子目錄名稱(啟用日志聚集功能時(shí)有效)闽坡。 | 日志將被轉(zhuǎn)移到目錄 |
MapReduce
本節(jié)所有配置都寫在mapred-site.xml中
MapReduce JobHistory
參數(shù)名稱 | 作用 | 默認(rèn)值 |
---|---|---|
mapreduce.jobhistory.address | MapReduce JobHistory Server地址栽惶。 | 0.0.0.0:10020 |
mapreduce.jobhistory.webapp.address | MapReduce JobHistory Server Web UI地址。 | 0.0.0.0:19888 |
mapreduce.jobhistory.intermediate-done-dir | MapReduce作業(yè)產(chǎn)生的日志存放位置疾嗅。 | /mr-history/tmp |
mapreduce.jobhistory.done-dir | MR JobHistory Server管理的日志的存放位置外厂。 | /mr-history/done |
MapReduce作業(yè)配置
下面的參數(shù)可以配置在客戶端的mapred-site.xml中,作為MapReduce作業(yè)的缺省配置代承。也可以在提交作業(yè)時(shí)單獨(dú)指定這些參數(shù)
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
mapreduce.job.name | 作業(yè)名稱 | |
mapreduce.job.priority | 作業(yè)優(yōu)先級(jí) | NORMAL |
yarn.app.mapreduce.am.resource.mb | ApplicationMaster占用的內(nèi)存量 | 1536 |
yarn.app.mapreduce.am.resource.cpu-vcores | ApplicationMaster占用的虛擬CPU個(gè)數(shù) | 1 |
mapreduce.am.max-attempts | ApplicationMaster最大失敗嘗試次數(shù) | 2 |
mapreduce.map.memory.mb | 每個(gè)Map Task需要的內(nèi)存量 | 1024 |
mapreduce.map.cpu.vcores | 每個(gè)Map Task需要的虛擬CPU個(gè)數(shù) | 1 |
mapreduce.map.maxattempts | Map Task最大失敗嘗試次數(shù) | 4 |
mapreduce.reduce.memory.mb | 每個(gè)Reduce Task需要的內(nèi)存量 | 1024 |
mapreduce.reduce.cpu.vcores | 每個(gè)Reduce Task需要的虛擬CPU個(gè)數(shù) | 1 |
mapreduce.reduce.maxattempts | Reduce Task最大失敗嘗試次數(shù) | 4 |
mapreduce.map.speculative | 是否對(duì)Map Task啟用推測(cè)執(zhí)行機(jī)制 | FALSE |
mapreduce.reduce.speculative | 是否對(duì)Reduce Task啟用推測(cè)執(zhí)行機(jī)制 | FALSE |
mapreduce.job.queuename | 作業(yè)提交到的隊(duì)列 | default |
mapreduce.task.io.sort.mb | 任務(wù)內(nèi)部排序緩沖區(qū)大小 | 100 |
mapreduce.map.sort.spill.percent | Map階段溢寫文件的閾值(排序緩沖區(qū)大小的百分比) | 0.8 |
mapreduce.reduce.shuffle.parallelcopies | Reduce Task啟動(dòng)的并發(fā)拷貝數(shù)據(jù)的線程數(shù)目 | 5 |
Fair Scheduler相關(guān)參數(shù)
本節(jié)的參數(shù)需要在yarn-site.xml中汁蝶,將配置參數(shù)yarn.resourcemanager.scheduler.class設(shè)置為org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler 才會(huì)生效。Fair Scheduler的配置選項(xiàng)包括兩部分,其中一部分在yarn-site.xml中掖棉,主要用于配置調(diào)度器級(jí)別的參數(shù)墓律,另外一部分在一個(gè)自定義配置文件(默認(rèn)是fair-scheduler.xml)中,主要用于配置各個(gè)隊(duì)列的資源量幔亥、權(quán)重等信息耻讽。
yarn-site.xml
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
yarn.scheduler.fair.allocation.file | 自定義XML配置文件所在位置,該文件主要用于描述各個(gè)隊(duì)列的屬性紫谷,比如資源量齐饮、權(quán)重等,具體配置格式將在后面介紹笤昨。 | |
yarn.scheduler.fair.user-as-default-queue | 當(dāng)應(yīng)用程序未指定隊(duì)列名時(shí)祖驱,是否指定用戶名作為應(yīng)用程序所在的隊(duì)列名。如果設(shè)置為false或者未設(shè)置瞒窒,所有未知隊(duì)列的應(yīng)用程序?qū)⒈惶峤坏絛efault隊(duì)列中 | true |
yarn.scheduler.fair.preemption | 是否啟用搶占機(jī)制 | false |
yarn.scheduler.fair.sizebasedweight | 在一個(gè)隊(duì)列內(nèi)部分配資源時(shí)捺僻,默認(rèn)情況下,采用公平輪詢的方法將資源分配各各個(gè)應(yīng)用程序崇裁,而該參數(shù)則提供了另外一種資源分配方式:按照應(yīng)用程序資源需求數(shù)目分配資源匕坯,即需求資源數(shù)量越多,分配的資源越多拔稳。 | false |
yarn.scheduler.assignmultiple | 是否啟動(dòng)批量分配功能葛峻。當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)大量資源時(shí),可以一次分配完成巴比,也可以多次分配完成术奖。 | false |
yarn.scheduler.fair.max.assign | 如果開啟批量分配功能,可指定一次分配的container數(shù)目轻绞。 | -1采记,表示不限制。 |
yarn.scheduler.fair.locality.threshold.node | 當(dāng)應(yīng)用程序請(qǐng)求某個(gè)節(jié)點(diǎn)上資源時(shí)政勃,它可以接受的可跳過的最大資源調(diào)度機(jī)會(huì)唧龄。當(dāng)按照分配策略,可將一個(gè)節(jié)點(diǎn)上的資源分配給某個(gè)應(yīng)用程序時(shí)奸远,如果該節(jié)點(diǎn)不是應(yīng)用程序期望的節(jié)點(diǎn)既棺,可選擇跳過該分配機(jī)會(huì)暫時(shí)將資源分配給其他應(yīng)用程序,直到出現(xiàn)滿足該應(yīng)用程序需的節(jié)點(diǎn)資源出現(xiàn)懒叛。通常而言援制,一次心跳代表一次調(diào)度機(jī)會(huì),而該參數(shù)則表示跳過調(diào)度機(jī)會(huì)占節(jié)點(diǎn)總數(shù)的比例 | -1.0芍瑞,表示不跳過任何調(diào)度機(jī)會(huì) |
yarn.scheduler.fair.locality.threshold.rack | 當(dāng)應(yīng)用程序請(qǐng)求某個(gè)機(jī)架上資源時(shí),它可以接受的可跳過的最大資源調(diào)度機(jī)會(huì)褐墅。 | |
yarn.scheduler.increment-allocation-mb | 內(nèi)存規(guī)整化單位 | 默認(rèn)是1024拆檬,這意味著洪己,如果一個(gè)Container請(qǐng)求資源是1.5GB,則將被調(diào)度器規(guī)整化為ceiling(1.5 GB / 1GB) * 1G=2GB竟贯。 |
yarn.scheduler.increment-allocation-vcores | 虛擬CPU規(guī)整化單位 | 默認(rèn)是1答捕,含義與內(nèi)存規(guī)整化單位類似。 |
自定義配置文件
Fair Scheduler允許用戶將隊(duì)列信息專門放到一個(gè)配置文件(默認(rèn)是fair-scheduler.xml)屑那,對(duì)于每個(gè)隊(duì)列拱镐,管理員可配置以下幾個(gè)選項(xiàng):
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
minResources | 最少資源保證量,設(shè)置格式為“X mb, Y vcores”持际,當(dāng)一個(gè)隊(duì)列的最少資源保證量未滿足時(shí)沃琅,它將優(yōu)先于其他同級(jí)隊(duì)列獲得資源,對(duì)于不同的調(diào)度策略(后面會(huì)詳細(xì)介紹)蜘欲,最少資源保證量的含義不同益眉,對(duì)于fair策略,則只考慮內(nèi)存資源姥份,即如果一個(gè)隊(duì)列使用的內(nèi)存資源超過了它的最少資源量郭脂,則認(rèn)為它已得到了滿足;對(duì)于drf策略澈歉,則考慮主資源使用的資源量展鸡,即如果一個(gè)隊(duì)列的主資源量超過它的最少資源量,則認(rèn)為它已得到了滿足埃难。 | |
maxResources | 最多可以使用的資源量莹弊,fair scheduler會(huì)保證每個(gè)隊(duì)列使用的資源量不會(huì)超過該隊(duì)列的最多可使用資源量。 | |
maxRunningApps | 最多同時(shí)運(yùn)行的應(yīng)用程序數(shù)目凯砍。通過限制該數(shù)目箱硕,可防止超量Map Task同時(shí)運(yùn)行時(shí)產(chǎn)生的中間輸出結(jié)果撐爆磁盤。 | |
minSharePreemptionTimeout | 最小共享量搶占時(shí)間悟衩。如果一個(gè)資源池在該時(shí)間內(nèi)使用的資源量一直低于最小資源量剧罩,則開始搶占資源。 | |
schedulingMode/schedulingPolicy | 隊(duì)列采用的調(diào)度模式座泳,可以是fifo惠昔、fair或者drf。 | |
aclSubmitApps | 可向隊(duì)列中提交應(yīng)用程序的Linux用戶或用戶組列表挑势,默認(rèn)情況下為“*”镇防,表示任何用戶均可以向該隊(duì)列提交應(yīng)用程序。需要注意的是潮饱,該屬性具有繼承性来氧,即子隊(duì)列的列表會(huì)繼承父隊(duì)列的列表。配置該屬性時(shí),用戶之間或用戶組之間用“啦扬,”分割中狂,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”扑毡。 | |
aclAdministerApps | 該隊(duì)列的管理員列表胃榕。一個(gè)隊(duì)列的管理員可管理該隊(duì)列中的資源和應(yīng)用程序,比如可殺死任意應(yīng)用程序瞄摊。 |
Capacity Scheduler相關(guān)參數(shù)
在Capacity Scheduler的配置文件中勋又,隊(duì)列queueX的參數(shù)Y的配置名稱為yarn.scheduler.capacity.queueX.Y,為了簡單起見换帜,我們記為Y楔壤,則每個(gè)隊(duì)列可以配置的參數(shù)如下:
資源分配相關(guān)參數(shù)
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
capacity | 隊(duì)列的資源容量(百分比)。 當(dāng)系統(tǒng)非常繁忙時(shí)膜赃,應(yīng)保證每個(gè)隊(duì)列的容量得到滿足挺邀,而如果每個(gè)隊(duì)列應(yīng)用程序較少,可將剩余資源共享給其他隊(duì)列跳座。注意端铛,所有隊(duì)列的容量之和應(yīng)小于100。 | |
maximum-capacity | 隊(duì)列的資源使用上限(百分比)疲眷。由于存在資源共享禾蚕,因此一個(gè)隊(duì)列使用的資源量可能超過其容量,而最多使用資源量可通過該參數(shù)限制狂丝。 | |
minimum-user-limit-percent | 每個(gè)用戶最低資源保障(百分比)换淆。任何時(shí)刻,一個(gè)隊(duì)列中每個(gè)用戶可使用的資源量均有一定的限制几颜。當(dāng)一個(gè)隊(duì)列中同時(shí)運(yùn)行多個(gè)用戶的應(yīng)用程序時(shí)中倍试,每個(gè)用戶的使用資源量在一個(gè)最小值和最大值之間浮動(dòng),其中蛋哭,最小值取決于正在運(yùn)行的應(yīng)用程序數(shù)目县习,而最大值則由minimum-user-limit-percent決定。比如谆趾,假設(shè)minimum-user-limit-percent為25躁愿。當(dāng)兩個(gè)用戶向該隊(duì)列提交應(yīng)用程序時(shí),每個(gè)用戶可使用資源量不能超過50%沪蓬,如果三個(gè)用戶提交應(yīng)用程序彤钟,則每個(gè)用戶可使用資源量不能超多33%,如果四個(gè)或者更多用戶提交應(yīng)用程序跷叉,則每個(gè)用戶可用資源量不能超過25%逸雹。 | |
user-limit-factor | 每個(gè)用戶最多可使用的資源量(百分比)营搅。比如,假設(shè)該值為30峡眶,則任何時(shí)刻剧防,每個(gè)用戶使用的資源量不能超過該隊(duì)列容量的30%。 |
現(xiàn)在應(yīng)用程序數(shù)目相關(guān)參數(shù)
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
maximum-applications | 集群或者隊(duì)列中同時(shí)處于等待和運(yùn)行狀態(tài)的應(yīng)用程序數(shù)目上限辫樱,這是一個(gè)強(qiáng)限制,一旦集群中應(yīng)用程序數(shù)目超過該上限俊庇,后續(xù)提交的應(yīng)用程序?qū)⒈痪芙^狮暑,所有隊(duì)列的數(shù)目上限可通過參數(shù)yarn.scheduler.capacity.maximum-applications設(shè)置(可看做默認(rèn)值),而單個(gè)隊(duì)列可通過參數(shù)yarn.scheduler.capacity.<queue-path>.maximum-applications設(shè)置適合自己的值辉饱。 | 10000 |
maximum-am-resource-percent | 集群中用于運(yùn)行應(yīng)用程序ApplicationMaster的資源比例上限搬男,該參數(shù)通常用于限制處于活動(dòng)狀態(tài)的應(yīng)用程序數(shù)目。該參數(shù)類型為浮點(diǎn)型彭沼。所有隊(duì)列的ApplicationMaster資源比例上限可通過參數(shù)yarn.scheduler.capacity. maximum-am-resource-percent設(shè)置(可看做默認(rèn)值)缔逛,而單個(gè)隊(duì)列可通過參數(shù)yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent設(shè)置適合自己的值。 | 0.1姓惑,表示10% |
隊(duì)列訪問和權(quán)限控制參數(shù)
參數(shù)名稱 | 說明 | 缺省值 |
---|---|---|
state | 隊(duì)列狀態(tài)可以為STOPPED或者RUNNING褐奴,如果一個(gè)隊(duì)列處于STOPPED狀態(tài),用戶不可以將應(yīng)用程序提交到該隊(duì)列或者它的子隊(duì)列中于毙,類似的敦冬,如果ROOT隊(duì)列處于STOPPED狀態(tài),用戶不可以向集群中提交應(yīng)用程序唯沮,但正在運(yùn)行的應(yīng)用程序仍可以正常運(yùn)行結(jié)束脖旱,以便隊(duì)列可以優(yōu)雅地退出。 | |
acl_submit_applications | 限定哪些Linux用戶/用戶組可向給定隊(duì)列中提交應(yīng)用程序介蛉。需要注意的是萌庆,該屬性具有繼承性,即如果一個(gè)用戶可以向某個(gè)隊(duì)列中提交應(yīng)用程序币旧,則它可以向它的所有子隊(duì)列中提交應(yīng)用程序践险。配置該屬性時(shí),用戶之間或用戶組之間用“佳恬,”分割捏境,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”毁葱。 | |
acl_administer_queue | 為隊(duì)列指定一個(gè)管理員垫言,該管理員可控制該隊(duì)列的所有應(yīng)用程序,比如殺死任意一個(gè)應(yīng)用程序等倾剿。同樣筷频,該屬性具有繼承性蚌成,如果一個(gè)用戶可以向某個(gè)隊(duì)列中提交應(yīng)用程序,則它可以向它的所有子隊(duì)列中提交應(yīng)用程序凛捏。 |