說明
最近關(guān)于YARN的配置,尤其是調(diào)試日志的信息,總是記不住,留個記錄,方便以后查看。
轉(zhuǎn)自董西成的博客,在此感謝董西成老師的分享。
如需轉(zhuǎn)載,請注明出處,鏈接列表如下
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ù)名稱 | 作用 | 默認值 |
|---|---|---|
| yarn.resourcemanager.address | ResourceManager 對客戶端暴露的地址??蛻舳送ㄟ^該地址向RM提交應(yīng)用程序,殺死應(yīng)用程序等。 | ${yarn.resourcemanager.hostname}:8032 |
| yarn.resourcemanager.scheduler.address | ResourceManager 對ApplicationMaster暴露的訪問地址。ApplicationMaster通過該地址向RM申請資源、釋放資源等。 | ${yarn.resourcemanager.hostname}:8030 |
| yarn.resourcemanager.resource-tracker.address | ResourceManager 對NodeManager暴露的地址.。NodeManager通過該地址向RM匯報心跳,領(lǐng)取任務(wù)等。 | ${yarn.resourcemanager.hostname}:8031 |
| yarn.resourcemanager.admin.address | ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向RM發(fā)送管理命令等。 | ${yarn.resourcemanager.hostname}:8033 |
| yarn.resourcemanager.webapp.address | ResourceManager對外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請求的Handler數(shù)目。 | 50 |
| yarn.resourcemanager.scheduler.client.thread-count | 處理來自ApplicationMaster的RPC請求的Handler數(shù)目。 | 50 |
| yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb | 單個可申請的最小/最大內(nèi)存資源量。比如設(shè)置為1024和3072,則運行MapRedce作業(yè)時,每個Task最少可申請1024MB內(nèi)存,最多可申請3072MB內(nèi)存。 | 1024/8192 |
| yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores | 單個可申請的最小/最大虛擬CPU個數(shù)。比如設(shè)置為1和4,則運行MapRedce作業(yè)時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU。什么是虛擬CPU,可閱讀我的這篇文章:“YARN 資源調(diào)度器剖析”。 | 1/32 |
| yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path | NodeManager黑白名單。如果發(fā)現(xiàn)若干個NodeManager存在問題,比如故障率很高,任務(wù)運行失敗率高,則可以將之加入黑名單中。注意,這兩個配置參數(shù)可以動態(tài)生效。(調(diào)用一個refresh命令即可) | "" |
| yarn.resourcemanager.nodemanagers.heartbeat-interval-ms | NodeManager心跳間隔 | 1000(毫秒) |
NodeManager
| 參數(shù)名稱 | 作用 | 默認值 |
|---|---|---|
| yarn.nodemanager.resource.memory-mb | NodeManager總的可用物理內(nèi)存。注意,該參數(shù)是不可修改的,一旦設(shè)置,整個運行過程中不可動態(tài)修改。另外,該參數(shù)的默認值是8192MB,即使你的機器內(nèi)存不夠8192MB,YARN也會按照這些內(nèi)存來使用(傻不傻?),因此,這個值通過一定要配置。不過,Apache已經(jīng)正在嘗試將該參數(shù)做成可動態(tài)修改的。 | 8192 |
| yarn.nodemanager.vmem-pmem-ratio | 每使用1MB物理內(nèi)存,最多可用的虛擬內(nèi)存數(shù)。 | 2.1 |
| yarn.nodemanager.resource.cpu-vcores | NodeManager總的可用虛擬CPU個數(shù)。 | 8 |
| yarn.nodemanager.local-dirs | 中間結(jié)果存放位置,類似于1.0中的mapred.local.dir。注意,這個參數(shù)通常會配置多個目錄,已分攤磁盤IO負載。 | ${hadoop.tmp.dir}/nm-local-dir |
| yarn.nodemanager.log-dirs | 日志存放地址(可配置多個目錄)。 | ${yarn.log.dir}/userlogs |
| yarn.nodemanager.log.retain-seconds | NodeManager上日志最多存放時間(不啟用日志聚集功能時有效)。 | 10800(3小時) |
| yarn.nodemanager.aux-services | NodeManager上運行的附屬服務(wù)。需配置成mapreduce_shuffle,才可運行MapReduce程序 | 默認值:"" |
權(quán)限與日志聚集
日志聚集
| 參數(shù)名稱 | 作用 | 默認值 |
|---|---|---|
| yarn.log-aggregation-enable | 是否啟用日志聚集功能。 | false |
| yarn.log-aggregation.retain-seconds | 在HDFS上聚集的日志最多保存多長時間。 | -1 |
| yarn.log-aggregation.retain-check-interval-seconds | 多長時間檢查一次日志,并將滿足條件的刪除,如果是0或者負數(shù),則為上一個值的1/10。 | -1 |
| yarn.nodemanager.remote-app-log-dir | 當(dāng)應(yīng)用程序運行結(jié)束后,日志被轉(zhuǎn)移到的HDFS目錄(啟用日志聚集功能時有效)。 | /tmp/logs |
| yarn.log-aggregation.retain-seconds | 遠程日志目錄子目錄名稱(啟用日志聚集功能時有效)。 | 日志將被轉(zhuǎn)移到目錄 |
MapReduce
本節(jié)所有配置都寫在mapred-site.xml中
MapReduce JobHistory
| 參數(shù)名稱 | 作用 | 默認值 |
|---|---|---|
| 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ù)
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| mapreduce.job.name | 作業(yè)名稱 | |
| mapreduce.job.priority | 作業(yè)優(yōu)先級 | NORMAL |
| yarn.app.mapreduce.am.resource.mb | ApplicationMaster占用的內(nèi)存量 | 1536 |
| yarn.app.mapreduce.am.resource.cpu-vcores | ApplicationMaster占用的虛擬CPU個數(shù) | 1 |
| mapreduce.am.max-attempts | ApplicationMaster最大失敗嘗試次數(shù) | 2 |
| mapreduce.map.memory.mb | 每個Map Task需要的內(nèi)存量 | 1024 |
| mapreduce.map.cpu.vcores | 每個Map Task需要的虛擬CPU個數(shù) | 1 |
| mapreduce.map.maxattempts | Map Task最大失敗嘗試次數(shù) | 4 |
| mapreduce.reduce.memory.mb | 每個Reduce Task需要的內(nèi)存量 | 1024 |
| mapreduce.reduce.cpu.vcores | 每個Reduce Task需要的虛擬CPU個數(shù) | 1 |
| mapreduce.reduce.maxattempts | Reduce Task最大失敗嘗試次數(shù) | 4 |
| mapreduce.map.speculative | 是否對Map Task啟用推測執(zhí)行機制 | FALSE |
| mapreduce.reduce.speculative | 是否對Reduce Task啟用推測執(zhí)行機制 | FALSE |
| mapreduce.job.queuename | 作業(yè)提交到的隊列 | 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啟動的并發(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 才會生效。Fair Scheduler的配置選項包括兩部分,其中一部分在yarn-site.xml中,主要用于配置調(diào)度器級別的參數(shù),另外一部分在一個自定義配置文件(默認是fair-scheduler.xml)中,主要用于配置各個隊列的資源量、權(quán)重等信息。
yarn-site.xml
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| yarn.scheduler.fair.allocation.file | 自定義XML配置文件所在位置,該文件主要用于描述各個隊列的屬性,比如資源量、權(quán)重等,具體配置格式將在后面介紹。 | |
| yarn.scheduler.fair.user-as-default-queue | 當(dāng)應(yīng)用程序未指定隊列名時,是否指定用戶名作為應(yīng)用程序所在的隊列名。如果設(shè)置為false或者未設(shè)置,所有未知隊列的應(yīng)用程序?qū)⒈惶峤坏絛efault隊列中 | true |
| yarn.scheduler.fair.preemption | 是否啟用搶占機制 | false |
| yarn.scheduler.fair.sizebasedweight | 在一個隊列內(nèi)部分配資源時,默認情況下,采用公平輪詢的方法將資源分配各各個應(yīng)用程序,而該參數(shù)則提供了另外一種資源分配方式:按照應(yīng)用程序資源需求數(shù)目分配資源,即需求資源數(shù)量越多,分配的資源越多。 | false |
| yarn.scheduler.assignmultiple | 是否啟動批量分配功能。當(dāng)一個節(jié)點出現(xiàn)大量資源時,可以一次分配完成,也可以多次分配完成。 | false |
| yarn.scheduler.fair.max.assign | 如果開啟批量分配功能,可指定一次分配的container數(shù)目。 | -1,表示不限制。 |
| yarn.scheduler.fair.locality.threshold.node | 當(dāng)應(yīng)用程序請求某個節(jié)點上資源時,它可以接受的可跳過的最大資源調(diào)度機會。當(dāng)按照分配策略,可將一個節(jié)點上的資源分配給某個應(yīng)用程序時,如果該節(jié)點不是應(yīng)用程序期望的節(jié)點,可選擇跳過該分配機會暫時將資源分配給其他應(yīng)用程序,直到出現(xiàn)滿足該應(yīng)用程序需的節(jié)點資源出現(xiàn)。通常而言,一次心跳代表一次調(diào)度機會,而該參數(shù)則表示跳過調(diào)度機會占節(jié)點總數(shù)的比例 | -1.0,表示不跳過任何調(diào)度機會 |
| yarn.scheduler.fair.locality.threshold.rack | 當(dāng)應(yīng)用程序請求某個機架上資源時,它可以接受的可跳過的最大資源調(diào)度機會。 | |
| yarn.scheduler.increment-allocation-mb | 內(nèi)存規(guī)整化單位 | 默認是1024,這意味著,如果一個Container請求資源是1.5GB,則將被調(diào)度器規(guī)整化為ceiling(1.5 GB / 1GB) * 1G=2GB。 |
| yarn.scheduler.increment-allocation-vcores | 虛擬CPU規(guī)整化單位 | 默認是1,含義與內(nèi)存規(guī)整化單位類似。 |
自定義配置文件
Fair Scheduler允許用戶將隊列信息專門放到一個配置文件(默認是fair-scheduler.xml),對于每個隊列,管理員可配置以下幾個選項:
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| minResources | 最少資源保證量,設(shè)置格式為“X mb, Y vcores”,當(dāng)一個隊列的最少資源保證量未滿足時,它將優(yōu)先于其他同級隊列獲得資源,對于不同的調(diào)度策略(后面會詳細介紹),最少資源保證量的含義不同,對于fair策略,則只考慮內(nèi)存資源,即如果一個隊列使用的內(nèi)存資源超過了它的最少資源量,則認為它已得到了滿足;對于drf策略,則考慮主資源使用的資源量,即如果一個隊列的主資源量超過它的最少資源量,則認為它已得到了滿足。 | |
| maxResources | 最多可以使用的資源量,fair scheduler會保證每個隊列使用的資源量不會超過該隊列的最多可使用資源量。 | |
| maxRunningApps | 最多同時運行的應(yīng)用程序數(shù)目。通過限制該數(shù)目,可防止超量Map Task同時運行時產(chǎn)生的中間輸出結(jié)果撐爆磁盤。 | |
| minSharePreemptionTimeout | 最小共享量搶占時間。如果一個資源池在該時間內(nèi)使用的資源量一直低于最小資源量,則開始搶占資源。 | |
| schedulingMode/schedulingPolicy | 隊列采用的調(diào)度模式,可以是fifo、fair或者drf。 | |
| aclSubmitApps | 可向隊列中提交應(yīng)用程序的Linux用戶或用戶組列表,默認情況下為“*”,表示任何用戶均可以向該隊列提交應(yīng)用程序。需要注意的是,該屬性具有繼承性,即子隊列的列表會繼承父隊列的列表。配置該屬性時,用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。 | |
| aclAdministerApps | 該隊列的管理員列表。一個隊列的管理員可管理該隊列中的資源和應(yīng)用程序,比如可殺死任意應(yīng)用程序。 |
Capacity Scheduler相關(guān)參數(shù)
在Capacity Scheduler的配置文件中,隊列queueX的參數(shù)Y的配置名稱為yarn.scheduler.capacity.queueX.Y,為了簡單起見,我們記為Y,則每個隊列可以配置的參數(shù)如下:
資源分配相關(guān)參數(shù)
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| capacity | 隊列的資源容量(百分比)。 當(dāng)系統(tǒng)非常繁忙時,應(yīng)保證每個隊列的容量得到滿足,而如果每個隊列應(yīng)用程序較少,可將剩余資源共享給其他隊列。注意,所有隊列的容量之和應(yīng)小于100。 | |
| maximum-capacity | 隊列的資源使用上限(百分比)。由于存在資源共享,因此一個隊列使用的資源量可能超過其容量,而最多使用資源量可通過該參數(shù)限制。 | |
| minimum-user-limit-percent | 每個用戶最低資源保障(百分比)。任何時刻,一個隊列中每個用戶可使用的資源量均有一定的限制。當(dāng)一個隊列中同時運行多個用戶的應(yīng)用程序時中,每個用戶的使用資源量在一個最小值和最大值之間浮動,其中,最小值取決于正在運行的應(yīng)用程序數(shù)目,而最大值則由minimum-user-limit-percent決定。比如,假設(shè)minimum-user-limit-percent為25。當(dāng)兩個用戶向該隊列提交應(yīng)用程序時,每個用戶可使用資源量不能超過50%,如果三個用戶提交應(yīng)用程序,則每個用戶可使用資源量不能超多33%,如果四個或者更多用戶提交應(yīng)用程序,則每個用戶可用資源量不能超過25%。 | |
| user-limit-factor | 每個用戶最多可使用的資源量(百分比)。比如,假設(shè)該值為30,則任何時刻,每個用戶使用的資源量不能超過該隊列容量的30%。 |
現(xiàn)在應(yīng)用程序數(shù)目相關(guān)參數(shù)
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| maximum-applications | 集群或者隊列中同時處于等待和運行狀態(tài)的應(yīng)用程序數(shù)目上限,這是一個強限制,一旦集群中應(yīng)用程序數(shù)目超過該上限,后續(xù)提交的應(yīng)用程序?qū)⒈痪芙^,所有隊列的數(shù)目上限可通過參數(shù)yarn.scheduler.capacity.maximum-applications設(shè)置(可看做默認值),而單個隊列可通過參數(shù)yarn.scheduler.capacity.<queue-path>.maximum-applications設(shè)置適合自己的值。 | 10000 |
| maximum-am-resource-percent | 集群中用于運行應(yīng)用程序ApplicationMaster的資源比例上限,該參數(shù)通常用于限制處于活動狀態(tài)的應(yīng)用程序數(shù)目。該參數(shù)類型為浮點型。所有隊列的ApplicationMaster資源比例上限可通過參數(shù)yarn.scheduler.capacity. maximum-am-resource-percent設(shè)置(可看做默認值),而單個隊列可通過參數(shù)yarn.scheduler.capacity.<queue-path>. maximum-am-resource-percent設(shè)置適合自己的值。 | 0.1,表示10% |
隊列訪問和權(quán)限控制參數(shù)
| 參數(shù)名稱 | 說明 | 缺省值 |
|---|---|---|
| state | 隊列狀態(tài)可以為STOPPED或者RUNNING,如果一個隊列處于STOPPED狀態(tài),用戶不可以將應(yīng)用程序提交到該隊列或者它的子隊列中,類似的,如果ROOT隊列處于STOPPED狀態(tài),用戶不可以向集群中提交應(yīng)用程序,但正在運行的應(yīng)用程序仍可以正常運行結(jié)束,以便隊列可以優(yōu)雅地退出。 | |
| acl_submit_applications | 限定哪些Linux用戶/用戶組可向給定隊列中提交應(yīng)用程序。需要注意的是,該屬性具有繼承性,即如果一個用戶可以向某個隊列中提交應(yīng)用程序,則它可以向它的所有子隊列中提交應(yīng)用程序。配置該屬性時,用戶之間或用戶組之間用“,”分割,用戶和用戶組之間用空格分割,比如“user1, user2 group1,group2”。 | |
| acl_administer_queue | 為隊列指定一個管理員,該管理員可控制該隊列的所有應(yīng)用程序,比如殺死任意一個應(yīng)用程序等。同樣,該屬性具有繼承性,如果一個用戶可以向某個隊列中提交應(yīng)用程序,則它可以向它的所有子隊列中提交應(yīng)用程序。 |