常見(jiàn)問(wèn)題
本文匯總了YARN使用時(shí)的常見(jiàn)問(wèn)題。
集群?jiǎn)栴}匯總
組件問(wèn)題匯總
RM
NM
UI或REST API
TimelineServer
集群有狀態(tài)重啟包括哪些內(nèi)容?
集群有狀態(tài)重啟包括RM Restart和NM Restart兩部分,ResourceManager(簡(jiǎn)稱RM)負(fù)責(zé)維護(hù)應(yīng)用級(jí)基礎(chǔ)信息與狀態(tài),NodeManager(簡(jiǎn)稱NM)負(fù)責(zé)維護(hù)運(yùn)行時(shí)的Container信息與狀態(tài),它們持續(xù)將相關(guān)狀態(tài)同步至外部存儲(chǔ)(Zookeeper、LevelDB和HDFS等),并在重啟后重新加載狀態(tài)自行恢復(fù),保證集群升級(jí)或重啟后應(yīng)用自動(dòng)恢復(fù),通常情況下可以做到應(yīng)用無(wú)感知。
如何啟用RM HA?
您可以在EMR控制臺(tái)YARN服務(wù)的配置頁(yè)簽,檢查或者配置以下參數(shù)啟用RM HA。
參數(shù) | 描述 |
yarn.resourcemanager.ha.enabled | 設(shè)置為true,表示開(kāi)啟HA。 默認(rèn)值為false。 |
yarn.resourcemanager.ha.automatic-failover.enabled | 使用默認(rèn)值true,表示啟用自動(dòng)切換。 |
yarn.resourcemanager.ha.automatic-failover.embedded | 使用默認(rèn)值true,表示使用嵌入的自動(dòng)切換方式。 |
yarn.resourcemanager.ha.curator-leader-elector.enabled | 設(shè)置為true,表示使用curator組件。 默認(rèn)值為false。 |
yarn.resourcemanager.ha.automatic-failover.zk-base-path | 使用默認(rèn)值/yarn-leader-electionleader-elector。 |
如何配置熱更新?
以下操作內(nèi)容適用于Hadoop 3.2.0及后續(xù)版本。
開(kāi)啟關(guān)鍵配置。
您可以在EMR控制臺(tái)YARN服務(wù)的配置頁(yè)簽,檢查或者配置以下參數(shù)。
參數(shù)
描述
參數(shù)值(推薦)
yarn.scheduler.configuration.store.class
使用的后備存儲(chǔ)的類型。例如,設(shè)置為fs,表示使用FileSystem類型存儲(chǔ)。
fs
yarn.scheduler.configuration.max.version
保留歷史版本的最大數(shù)量,超出自動(dòng)清理。
100
yarn.scheduler.configuration.fs.path
capacity-scheduler.xml文件存儲(chǔ)路徑。
不存在存儲(chǔ)路徑時(shí),則自動(dòng)創(chuàng)建。不指定前綴時(shí),則默認(rèn)defaultFs的相對(duì)路徑。
/yarn/<集群名>/scheduler/conf
重要將<集群名>替換為集群名稱以便區(qū)分,可能有多個(gè)YARN集群對(duì)應(yīng)同一分布式存儲(chǔ)的情況。
查看capacity-scheduler.xml配置。
方式一(REST API):http://<rm-address>/ws/v1/cluster/scheduler-conf。
方式二(HDFS文件):${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp>,其中后綴<timestamp>值最大的文件是最新的配置文件。
更新配置。
示例:更新一個(gè)配置項(xiàng)yarn.scheduler.capacity.maximum-am-resource-percent,并刪除配置項(xiàng)yarn.scheduler.capacity.xxx,刪除某配置項(xiàng)只需去掉其Value值。
curl -X PUT -H "Content-type: application/json" 'http://<rm-address>/ws/v1/cluster/scheduler-conf' -d ' { "global-updates": [ { "entry": [{ "key":"yarn.scheduler.capacity.maximum-am-resource-percent", "value":"0.2" },{ "key":"yarn.scheduler.capacity.xxx" }] } ] }'
如何處理Queue內(nèi)應(yīng)用分配不均?
以下操作內(nèi)容適用于Hadoop 2.8.0及后續(xù)版本。
Queue內(nèi)部資源通常會(huì)被大作業(yè)占據(jù),小作業(yè)較難獲得資源,希望各作業(yè)能公平獲得資源。您可以通過(guò)以下步驟處理:
修改Queue配置yarn.scheduler.capacity.<queue-path>.ordering-policy,使其調(diào)度次序由fifo(默認(rèn)值)改為fair。
說(shuō)明FIFO Scheduler為先進(jìn)先出調(diào)度器,F(xiàn)air Scheduler為公平調(diào)度器。
您還可以修改參數(shù)yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight,該參數(shù)默認(rèn)值false,表示按used資源值從小到大排序,參數(shù)值為true時(shí)表示按照used或demand計(jì)算值從小到大排序。
開(kāi)啟隊(duì)列內(nèi)搶占。
隊(duì)列內(nèi)搶占常用參數(shù)如下表所示。
參數(shù)
描述
參數(shù)值(推薦)
yarn.resourcemanager.scheduler.monitor.enable
搶占功能總開(kāi)關(guān),在yarn-site.xml中配置,其余參數(shù)是在capacity-scheduler.xml中配置。
true
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled
隊(duì)列內(nèi)搶占開(kāi)關(guān)(隊(duì)列間搶占無(wú)開(kāi)關(guān),默認(rèn)開(kāi)啟)。
true
yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy
搶占策略優(yōu)先考慮應(yīng)用優(yōu)先級(jí),默認(rèn)值為userlimit_first。
priority_first
yarn.scheduler.capacity.<queue-path>.disable_preemption
指定Queue不被搶占,默認(rèn)false。
true表示不允許指定Queue資源被搶占,子Queue未配置則繼承父Queue配置值。
true
yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption
指定Queue不開(kāi)啟隊(duì)列內(nèi)搶占,默認(rèn)值false。
true表示禁用Queue內(nèi)搶占,子Queue未配置則繼承父Queue配置值。
true
如何查看隊(duì)列資源使用情況?
要查看隊(duì)列資源使用情況,您可以在YARN WebUI頁(yè)面查看Used Capacity參數(shù)。Used Capacity參數(shù)表示該隊(duì)列已使用的資源占該隊(duì)列整體資源的百分比,分別計(jì)算Memory和vCores占總體的比例,并選取最大值作為隊(duì)列整體資源使用的比例。具體查看操作如下:
訪問(wèn)YARN UI,詳情請(qǐng)參見(jiàn)訪問(wèn)鏈接與端口。
在All Applications頁(yè)面,單擊目標(biāo)作業(yè)的ID。
單擊Queue行的隊(duì)列。
在Application Queues區(qū)域,可以查看隊(duì)列資源使用情況。
YARN服務(wù)組件.out日志為何會(huì)大量堆積且無(wú)法自動(dòng)清理?
問(wèn)題原因:Hadoop組件部分依賴庫(kù)使用Java Logging APIs來(lái)生成日志記錄,不支持使用log4j配置的日志輪轉(zhuǎn)。目前這些daemon組件的stderr輸出被重定向到
.out
文件中,沒(méi)有自動(dòng)清理機(jī)制,長(zhǎng)時(shí)間積累可能導(dǎo)致數(shù)據(jù)盤(pán)存儲(chǔ)空間被占滿。處理方法:可以使用
head
和tail
命令結(jié)合日志中生成的時(shí)間戳信息,來(lái)判斷是否由于Java Logging APIs生成的日志導(dǎo)致存儲(chǔ)空間占用過(guò)大。通常情況下,這些依賴庫(kù)產(chǎn)生的都是INFO級(jí)別日志,不影響組件正常功能使用,但為了避免數(shù)據(jù)盤(pán)存儲(chǔ)空間被占用,可以采取修改配置的方式禁用此類日志的生成。例如,在優(yōu)化TimelineServer組件以關(guān)閉jersey依賴庫(kù)的日志生成時(shí),操作步驟如下:
通過(guò)以下命令,監(jiān)控YARN日志路徑中與
hadoop-timelineserver-
相關(guān)的.out
日志文件。DataLake集群的日志路徑為/var/log/emr/yarn/
,Hadoop集群日志路徑為/mnt/disk1/log/hadoop-yarn
。tail /var/log/emr/yarn/*-hadoop-timelineserver-*.out
觀察到輸出日志中包含由com.sun.jersey組件產(chǎn)生的記錄。
為了禁止組件輸出Jersey庫(kù)的INFO級(jí)別日志到.out 文件,創(chuàng)建并配置一個(gè)文件來(lái)關(guān)閉其日志生成。在運(yùn)行有TimelineServer組件的EMR節(jié)點(diǎn)上,可以通過(guò)執(zhí)行以下命令以root權(quán)限創(chuàng)建并編輯配置文件。
sudo su root -c "echo 'com.sun.jersey.level = OFF' > $HADOOP_CONF_DIR/off-logging.properties"
在EMR控制臺(tái)中YARN服務(wù)的配置頁(yè)面,查找
YARN_TIMELINESERVER_OPTS
參數(shù)(Hadoop集群為yarn_timelineserver_opts
),并在此參數(shù)值后添加-Djava.util.logging.config.file=off-logging.properties
,指定剛剛創(chuàng)建的配置文件位置。保存上述配置更改后,重啟TimelineServer組件使新設(shè)置生效。持續(xù)觀察一段時(shí)間,如果TimelineServer組件正常啟動(dòng),并且
.out
日志中不再出現(xiàn)任何與com.sun.jersey
相關(guān)的日志信息,則說(shuō)明關(guān)閉jersey依賴庫(kù)日志的操作已成功完成。
如何檢查ResourceManager服務(wù)是否正常?
您可以通過(guò)以下方式檢查:
檢查ResourceManager HA狀態(tài)(如果集群已啟用HA,需確保有且只有一個(gè)Active ResourceManager),以下方式任選一種,檢查字段haState是否為ACTIVE或STANDBY,haZooKeeperConnectionState是否為CONNECTED:
命令行:yarn rmadmin -getAllServiceState
REST API:http://<rmAddress>/ws/v1/cluster/info
示例如下。
檢查應(yīng)用狀態(tài)。
執(zhí)行以下命令,查看是否有持續(xù)的SUBMITTED或ACCEPTED狀態(tài)。
yarn application -list
查看提交的新應(yīng)用是否可以正常運(yùn)行并結(jié)束。命令示例如下。
hadoop jar <hadoop_home>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar sleep -m 1 -mt 1000 -r 0
您可以在
sleep -m
之間新增配置項(xiàng)以指定Queue,新增的參數(shù)為-Dmapreduce.job.queuename,參數(shù)值為default。
如何了解應(yīng)用運(yùn)行狀況?
您可以查看以下信息。
查詢信息 | 描述 |
基本信息 | 包括ID、User、Name、Application Type、State、Queue、App-Priority、StartTime、FinishTime、State、FinalStatus、Running Containers、Allocated CPU VCores、Allocated Memory MB和Diagnostics(診斷信息)等。
|
Queue信息 |
|
Container日志 |
|
應(yīng)用問(wèn)題排查流程
檢查App狀態(tài),通過(guò)App詳情頁(yè)或App REST API檢查App狀態(tài)。
未找到App狀態(tài),可能原因:
客戶端向YARN提交之前失敗退出:客戶端組件問(wèn)題(檢查提交客戶端日志:BRS、flowagent等組件)。
客戶端無(wú)法連接YARN RM:檢查連接RM地址是否正確、網(wǎng)絡(luò)是否存在問(wèn)題。如有網(wǎng)絡(luò)問(wèn)題,客戶端可能存在報(bào)錯(cuò):
com.aliyun.emr.flow.agent.common.exceptions.EmrFlowException: ###[E40001,RESOURCE_MANAGER]: Failed to access to resource manager, cause: The stream is closed
。
NEW_SAVING:該狀態(tài)處于Zookeeper State Store寫(xiě)入應(yīng)用信息階段。持續(xù)該狀態(tài)可能原因如下:
Zookeeper存在問(wèn)題,檢查Zookeeper服務(wù)是否正常。
Zookeeper讀寫(xiě)數(shù)據(jù)問(wèn)題,處理方法請(qǐng)參見(jiàn)RM處于Standby狀態(tài),無(wú)法自動(dòng)恢復(fù)Active狀態(tài),該如何處理?。
SUBMITTED:該狀態(tài)極少遇到,可能原因?yàn)镹ode Update請(qǐng)求太多造成Capacity Scheduler內(nèi)部搶鎖堵塞,通常發(fā)生在大規(guī)模集群,需優(yōu)化相關(guān)流程。相關(guān)案例,請(qǐng)參見(jiàn)YARN-9618。
ACCEPTED:檢查Diagnostics。請(qǐng)根據(jù)提示信息,選擇相應(yīng)的處理方式。
報(bào)錯(cuò)提示Queue's AM resource limit exceeded。
可能原因:Queue AM已使用資源和AM資源之和超出了Queue AM資源上限,UI條件為${Used Application Master Resources} + ${AM Resource Request} < ${Max Application Master Resources}。
處理方法:上調(diào)該Queue的AM資源上限。例如,設(shè)置參數(shù)yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent為0.5。
報(bào)錯(cuò)提示User's AM resource limit exceeded。
可能原因:Queue user AM已使用資源和AM資源之和超出了Queue user AM資源上限。
處理方法:提高user-limit比例。您可以修改參數(shù)yarn.scheduler.capacity.<queue-path>.user-limit-factor和yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent的參數(shù)值。
報(bào)錯(cuò)提示AM container is launched, waiting for AM container to Register with RM。
可能原因:AM已啟動(dòng),內(nèi)部初始化未完成(例如,Zookeeper連接超時(shí)等)。
處理方法:需要根據(jù)AM日志進(jìn)一步排查問(wèn)題。
報(bào)錯(cuò)提示Application is Activated, waiting for resources to be assigned for AM。
執(zhí)行步驟3,檢查AM資源分配為何未滿足。
RUNNING:執(zhí)行步驟2,檢查Container資源請(qǐng)求是否完成。
FAILED:檢查diagnostics。請(qǐng)根據(jù)提示信息,選擇相應(yīng)的處理方式。
報(bào)錯(cuò)提示Maximum system application limit reached,cannot accept submission of application
可能原因:集群內(nèi)運(yùn)行中的總應(yīng)用數(shù)超過(guò)上限(配置項(xiàng):yarn.scheduler.capacity.maximum-applications,默認(rèn)值:10000)。
處理方法:檢查JMX Metrics,確認(rèn)各隊(duì)列運(yùn)行的應(yīng)用數(shù)是否符合預(yù)期,找出并處理有大量重復(fù)提交的問(wèn)題應(yīng)用。如果應(yīng)用都正常,可以根據(jù)集群水位情況適當(dāng)調(diào)大上述配置。
報(bào)錯(cuò)提示Application XXX submitted by user YYY to unknown queue: ZZZ
可能原因:提交到不存在的queue。
處理方法:提交到已存在的leaf queue。
報(bào)錯(cuò)提示Application XXX submitted by user YYY to non-leaf queue: ZZZ
可能原因:提交到parent queue。
處理方法:提交到已存在的leaf queue。
報(bào)錯(cuò)提示Queue XXX is STOPPED. Cannot accept submission of application: YYY
可能原因:提交到STOPPED或DRAINING queue(已下線或正在下線的queue)。
處理方法:提交到RUNNING queue(工作狀態(tài)正常的queue)。
報(bào)錯(cuò)提示Queue XXX already has YYY applications, cannot accept submission of application: ZZZ
可能原因:queue應(yīng)用數(shù)達(dá)到上限。
處理方法:
檢查queue內(nèi)是否有大量重復(fù)提交的問(wèn)題應(yīng)用。
調(diào)整配置:yarn.scheduler.capacity.<queue-path>.maximum-applications。
報(bào)錯(cuò)提示Queue XXX already has YYY applications from user ZZZ cannot accept submission of application: AAA
可能原因:user應(yīng)用數(shù)達(dá)到上限。
處理方法:
檢查該user是否有大量重復(fù)提交的問(wèn)題應(yīng)用。
調(diào)整配置:yarn.scheduler.capacity.<queue-path>.maximum-applications、yarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent、yarn.scheduler.capacity.<queue-path>.user-limit-factor。
確認(rèn)YARN資源分配還未完成。
在apps列表頁(yè),單擊appID進(jìn)入AM頁(yè)面。
單擊下方列表的AM-ID,進(jìn)入AM-Attempt頁(yè)面。
查看Total Outstanding Resource Requests列表中是否有Pending資源(也可以通過(guò)PendingRequests REST API查詢):
沒(méi)有Pending資源:說(shuō)明YARN已分配完畢,退出該檢查流程,檢查AM情況。
有Pending資源:說(shuō)明YARN資源分配未完成,繼續(xù)下一步檢查。
資源限制檢查。
檢查集群或Queue資源,查看資源信息,例如,Effective Max Resource和Used Resources。
檢查集群資源或所在Queue資源或其父Queue資源是否已用完。
檢查葉子隊(duì)列某維度資源是否接近或達(dá)到上限。
當(dāng)集群資源接近用滿時(shí)(例如85%以上),應(yīng)用的分配速度可能會(huì)變慢,因?yàn)榇蟛糠謾C(jī)器都沒(méi)有資源了,分配的機(jī)器沒(méi)有資源就會(huì)reserve,reserve到一定個(gè)數(shù)后分配就會(huì)變慢,另外也可能是由于內(nèi)存資源和CPU資源不成比例,例如,有的機(jī)器上內(nèi)存資源有空閑但CPU資源已經(jīng)用滿,有的機(jī)器上CPU資源有空閑但內(nèi)存已經(jīng)用滿。
檢查是否存在Container資源分配成功但啟動(dòng)失敗的情況,YARN UI的App Attempt頁(yè)面可以看到已分配的Container數(shù)(間隔一小段時(shí)間觀察是否變化),如果有Container啟動(dòng)失敗,查看對(duì)應(yīng)的NM日志或Container日志進(jìn)一步排查失敗原因。
動(dòng)態(tài)修改日志級(jí)別:在YARN UI的logLevel頁(yè)面(http://RM_IP:8088/logLevel),將org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity(CapacityScheduler調(diào)度邏輯所在的package)參數(shù)的日志級(jí)別改為DEBUG,如下圖所示。
重要您需要在復(fù)現(xiàn)問(wèn)題的同時(shí)打開(kāi),持續(xù)幾十秒(由于日志刷新的很快,無(wú)需持續(xù)太長(zhǎng)時(shí)間),日志級(jí)別改回INFO即可恢復(fù)。
單任務(wù)/容器(Container)最大可用資源由哪些配置項(xiàng)決定?
由調(diào)度器或隊(duì)列(queue)配置項(xiàng)決定:
配置項(xiàng) | 配置說(shuō)明 | 默認(rèn)值 |
yarn.scheduler.maximum-allocation-mb | 集群級(jí)最大可調(diào)度內(nèi)存資源,單位:MB。 | EMR默認(rèn)值為:創(chuàng)建集群時(shí)最大非master實(shí)例組的可用內(nèi)存(與最大實(shí)例組的 yarn.nodemanager.resource.memory-mb參數(shù)的配置值相同)。 |
yarn.scheduler.maximum-allocation-vcores | 集群級(jí)最大可調(diào)度CPU資源,單位:VCore。 | EMR默認(rèn)值為32。 |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb | 指定隊(duì)列的最大可調(diào)度內(nèi)存資源,單位:MB。 | 默認(rèn)未配置,配置則覆蓋集群級(jí)配置,僅對(duì)指定隊(duì)列生效。 |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores | 指定隊(duì)列的最大可調(diào)度CPU資源,單位:VCore。 | 默認(rèn)未配置,配置則覆蓋集群級(jí)配置,僅對(duì)指定隊(duì)列生效。 |
如果申請(qǐng)資源超過(guò)單任務(wù)或容器(Container)的最大可用資源配置,應(yīng)用日志中能夠發(fā)現(xiàn)異常信息InvalidResourceRequestException: Invalid resource request…
。
YARN配置修改未生效,如何處理?
可能原因
非熱更新配置,配置關(guān)聯(lián)的組件未重啟。
熱更新配置,配置生效所需的指定操作未執(zhí)行。
解決方案:請(qǐng)確保相關(guān)配置修改的后續(xù)操作正確執(zhí)行。
配置集
配置類型
更新后續(xù)操作
capacity-scheduler.xml
fair-scheduler.xml
調(diào)度器配置。
熱更新配置,需要執(zhí)行RM組件的refresh_queues操作。
yarn-env.sh
yarn-site.xml
mapred-env.sh
mapred-site.xml
YARN組件運(yùn)行配置。
重啟配置關(guān)聯(lián)組件。例如:
修改配置yarn-env.sh中的YARN_RESOURCEMANAGER_HEAPSIZE、yarn-site.xml中的yarn.resourcemanager.nodes.exclude-path等配置項(xiàng)后,需重啟RM。
修改配置yarn-env.sh中的YARN_NODEMANAGER_HEAPSIZE、yarn-site.xml中的yarn.nodemanager.log-dirs等配置項(xiàng)后,需重啟NM。
修改配置mapred-env.sh中的MAPRED_HISTORYSERVER_OPTS、mapred-site.xml中的mapreduce.jobhistory.http.policys等配置項(xiàng)后,需重啟MRHistoryServer。
客戶端異常,提示Exception while invoking getClusterNodes of class ApplicationClientProtocolPBClientImpl over rm2 after 1 fail over attempts. Trying to fail over immediately
問(wèn)題現(xiàn)象:無(wú)法正常訪問(wèn)Active ResourceManager。ResourceManager日志異常,提示信息:WARN org.apache.hadoop.ipc.Server: Incorrect header or version mismatch from 10.33.**.**:53144 got version 6 expected version 9。
問(wèn)題原因:Hadoop版本太舊,導(dǎo)致客戶端RPC版本不兼容。
處理方法:使用匹配的Hadoop版本。
RM處于Standby狀態(tài),無(wú)法自動(dòng)恢復(fù)Active狀態(tài),該如何處理?
您可以通過(guò)以下方式排查問(wèn)題:
檢查支持自動(dòng)恢復(fù)的必選配置項(xiàng)是否配置正確。
參數(shù)
描述
yarn.resourcemanager.ha.enabled
需要配置為true。
yarn.resourcemanager.ha.automatic-failover.enabled
需要配置為true。
yarn.resourcemanager.ha.automatic-failover.embedded
需要配置為true。
修改為上述配置后,問(wèn)題還未解決,您可以通過(guò)以下方式排查問(wèn)題:
檢查Zookeeper服務(wù)是否正常。
檢查Zookeeper客戶端(RM)讀取數(shù)據(jù)是否超出其Buffer上限。
問(wèn)題現(xiàn)象:RM日志內(nèi)存在異常,提示Zookeeper error len*** is out of range!或Unreasonable length = ***。
處理方法:在EMR控制臺(tái)YARN服務(wù)的配置頁(yè)面,單擊yarn-env頁(yè)簽,更新參數(shù)yarn_resourcemanager_opts的參數(shù)值為-Djute.maxbuffer=4194304 ,然后重啟RM。
Zookeeper服務(wù)端寫(xiě)入數(shù)據(jù)是否超出其Buffer上限。
問(wèn)題現(xiàn)象:Zookeeper日志內(nèi)存在異常,提示Exception causing close of session 0x1000004d5701b6a: Len error ***。
處理方法:Zookeeper服務(wù)各節(jié)點(diǎn)新增或更新配置項(xiàng)-Djute.maxbuffer= (單位:bytes) ,將Buffer上限調(diào)大超過(guò)異常顯示的長(zhǎng)度。
如果RM或Zookeeper日志都找不到異常,可能是因?yàn)镽M選主Zookeeper Ephemeral Node(${yarn.resourcemanager.zk-state-store.parent-path}/${yarn.resourcemanager.cluster-id}/ActiveStandbyElectorLock)被其他Session持有未釋放,可在zkCli命令窗口中stat該節(jié)點(diǎn)確認(rèn),默認(rèn)選主方式可能存在未知問(wèn)題或觸發(fā)Zookeeper問(wèn)題。
建議修改選主方式,在yarn-site頁(yè)簽中,新增或更新配置項(xiàng)yarn.resourcemanager.ha.curator-leader-elector.enabled為true ,然后重啟RM。
RM組件OOM如何處理?
RM OOM包括多種問(wèn)題類型,您需要先根據(jù)RM日志確定問(wèn)題類型,可能的問(wèn)題類型及對(duì)應(yīng)的原因和解決方案如下:
Java heap space或GC overhead limit exceeded或頻繁FullGC
原因
直接原因:JVM堆空間不足,RM進(jìn)程內(nèi)部對(duì)象無(wú)法獲取到足夠的資源,并且在拋出OOM之前已經(jīng)進(jìn)行過(guò)一輪或多輪FullGC回收了失效的對(duì)象,仍無(wú)法獲取足夠的堆空間用于分配。
原因分析:RM有很多常駐對(duì)象(不能被JVM回收的對(duì)象),包括集群、隊(duì)列(queue)、應(yīng)用、執(zhí)行任務(wù)容器(container)、節(jié)點(diǎn)(node)等各類信息。這些信息占用的堆空間隨著集群規(guī)模增大而增大,因此對(duì)于規(guī)模較大的集群需要保證RM進(jìn)程的內(nèi)存配置也較大。另一方面,由于需要保留應(yīng)用的歷史信息,隨著時(shí)間推移歷史應(yīng)用占用的存儲(chǔ)空間越來(lái)越大,即使是只有1個(gè)節(jié)點(diǎn)的最小規(guī)模集群,也需要確保有一定的存儲(chǔ)空間(建議不低于2 GB)。
解決方案
如果Master節(jié)點(diǎn)資源足夠,建議適當(dāng)增大RM堆內(nèi)存(yarn-env.sh配置項(xiàng)YARN_RESOURCEMANAGER_HEAPSIZE)。
對(duì)于小規(guī)模集群,也可以考慮適當(dāng)減小需要存儲(chǔ)的歷史應(yīng)用數(shù)量(yarn-site.xml配置項(xiàng)yarn.resourcemanager.max-completed-applications,默認(rèn):10000)。
unable to create new native thread
原因:RM所在節(jié)點(diǎn)上已用的總線程數(shù)達(dá)到系統(tǒng)上限,無(wú)法創(chuàng)建新的線程。
線程數(shù)上限由用戶最大可用線程數(shù)(查看命令:
ulimit -a | grep "max user processes"
)和PID最大可用數(shù)(查看命令:cat /proc/sys/kernel/pid_max
)決定。解決方案
如果可用線程數(shù)配置過(guò)低,調(diào)大相關(guān)系統(tǒng)配置。通常規(guī)格小的節(jié)點(diǎn)可用線程數(shù)需配置數(shù)萬(wàn)量級(jí),規(guī)格大的節(jié)點(diǎn)需配置十幾萬(wàn)或幾十萬(wàn)量級(jí)。
如果可用線程數(shù)配置正常,通常是節(jié)點(diǎn)上存在個(gè)別問(wèn)題進(jìn)程占用過(guò)多線程導(dǎo)致,可以進(jìn)一步定位哪些進(jìn)程占用線程較多。
執(zhí)行命令:
ps -eLf | awk '{print $2}' | uniq -c | awk '{print $2"\t"$1}' | sort -nrk2 | head
,查看占用線程數(shù)最多的Top10進(jìn)程,格式:[進(jìn)程ID] [占用線程數(shù)]。
為什么節(jié)點(diǎn)啟動(dòng)任務(wù)時(shí)Localize失敗或任務(wù)日志無(wú)法采集與刪除?
問(wèn)題現(xiàn)象:NM日志異常,提示java.io.IOException: Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider。
可能原因:HDFS配置異常。
處理方法:
以上是封裝后的異常,非根因,需要打開(kāi)DEBUG級(jí)別日志查看:
hadoop客戶端命令行環(huán)境(例如執(zhí)行
hadoop fs -ls /
命令),開(kāi)啟DEBUG調(diào)試信息。export HADOOP_LOGLEVEL=DEBUG
有Log4j配置的運(yùn)行環(huán)境,Log4j末尾增加
log4j.logger.org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider=DEBUG
。
以下示例的根因是用戶曾修改過(guò)NameServices配置,將emr-cluster修改為了hadoop-emr-cluster,但是擴(kuò)容節(jié)點(diǎn)時(shí)使用了修改前的配置。
在EMR控制臺(tái)HDFS服務(wù)的配置頁(yè)面,檢查各項(xiàng)配置是否正確。
資源本地化異常,該如何處理?
問(wèn)題現(xiàn)象:
Job AM Container啟動(dòng)失敗,異常信息如下。
Failed job diagnostics信息為:Application application_1412960082388_788293 failed 2 times due to AM Container for appattempt_1412960082388_788293_000002 exited with exitCode: -1000 due to: EPERM: Operation not permitted
在資源本地化過(guò)程中(下載后解壓時(shí))報(bào)錯(cuò),NodeManager日志信息如下。
INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService: Failed to download rsrc { { hdfs://hadoopnnvip.cm6:9000/user/heyuan.lhy/apv/small_apv_20141128.tar.gz, 1417144849604, ARCHIVE, null },pending,[(container_1412960082388_788293_01_000001)],14170282104675332,DOWNLOADING} EPERM: Operation not permitted at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmodImpl(Native Method) at org.apache.hadoop.io.nativeio.NativeIO$POSIX.chmod(NativeIO.java:226) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:629) at org.apache.hadoop.fs.DelegateToFileSystem.setPermission(DelegateToFileSystem.java:186) at org.apache.hadoop.fs.FilterFs.setPermission(FilterFs.java:235) at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:949) at org.apache.hadoop.fs.FileContext$10.next(FileContext.java:945) at org.apache.hadoop.fs.FSLinkResolver.resolve(FSLinkResolver.java:90) at org.apache.hadoop.fs.FileContext.setPermission(FileContext.java:945) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:398) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412) at org.apache.hadoop.yarn.util.FSDownload.changePermissions(FSDownload.java:412) at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:352) at org.apache.hadoop.yarn.util.FSDownload.call(FSDownload.java:57) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
問(wèn)題原因:壓縮包內(nèi)含有軟鏈接導(dǎo)致資源本地化異常。
處理方法:刪除該壓縮包內(nèi)包含的軟鏈接。
Container啟動(dòng)失敗或運(yùn)行異常,報(bào)錯(cuò)提示No space left on device,該如何處理?
可能原因及排查思路如下:
磁盤(pán)已滿。
檢查/sys/fs/cgroup/cpu/hadoop-yarn/cgroup.clone_children和/sys/fs/cgroup/cpu/cgroup.clone_children的Cgroups配置。
如果cgroup.clone_children的值為0,請(qǐng)修改為1,開(kāi)機(jī)啟動(dòng)項(xiàng)時(shí),設(shè)置命令
echo 1 > /sys/fs/cgroup/cpu/cgroup.clone_children
。如果沒(méi)有上述問(wèn)題,請(qǐng)檢查同級(jí)的cpuset.mems或cpuset.cpus文件,hadoop-yarn目錄中的值需要和上層一樣。
可能是Cgroups目錄的子目錄數(shù)超出上限65535造成的,檢查YARN配置yarn.nodemanager.linux-container-executor.cgroups.delete-delay-ms或者yarn.nodemanager.linux-container-executor.cgroups.delete-timeout-ms。
節(jié)點(diǎn)NM服務(wù)或任務(wù)運(yùn)行時(shí)無(wú)法正常解析域名,該如何處理?
問(wèn)題現(xiàn)象:報(bào)錯(cuò)提示java.net.UnknownHostException: Invalid host name: local host is: (unknown)。
問(wèn)題原因及處理方法:
查看是否正確配置了DNS服務(wù)器。
通過(guò)以下命令,檢查配置信息。
cat /etc/resolv.conf
查看防火墻是否設(shè)置了53端口的相關(guān)規(guī)則。
如果設(shè)置了,請(qǐng)關(guān)閉防火墻。
查看是否開(kāi)啟了DNS的NSCD緩存服務(wù)。
通過(guò)以下命令,檢查服務(wù)狀態(tài)。
systemctl status nscd
如果開(kāi)啟了DNS的NSCD緩存服務(wù),可以執(zhí)行以下命令,停止緩存服務(wù)。
systemctl stop nscd
NM組件OOM如何處理?
NM OOM包括多種問(wèn)題類型,您需要先根據(jù)NM日志確定問(wèn)題類型,可能的問(wèn)題類型及對(duì)應(yīng)的原因和解決方案如下:
Java heap space或GC overhead limit exceeded或頻繁FullGC
原因
直接原因:JVM堆空間不足,NM進(jìn)程內(nèi)部對(duì)象無(wú)法獲取到足夠的資源,并且在拋出OOM之前已經(jīng)進(jìn)行過(guò)一輪或多輪FullGC回收了失效的對(duì)象,仍無(wú)法獲取足夠的堆空間用于分配。
原因分析:NM進(jìn)程中的常駐對(duì)象不多,一般只包含當(dāng)前節(jié)點(diǎn)、運(yùn)行應(yīng)用、執(zhí)行任務(wù)容器(Container)等基本信息,這部分占用空間不會(huì)很大。可能占用空間較大的是External Shuffle Service的Cache和Buffer,這部分受Shuffle Service相關(guān)配置(例如Spark:spark.shuffle.service.index.cache.size或spark.shuffle.file.buffer,MapReduce:mapreduce.shuffle.ssl.file.buffer.size或mapreduce.shuffle.transfer.buffer.size等)影響,并且與使用了Shuffle Service的運(yùn)行應(yīng)用數(shù)(或執(zhí)行任務(wù)容器數(shù))成正比。這些信息占用的堆空間隨著使用ShuffleService應(yīng)用數(shù)或任務(wù)容器數(shù)的增大而增大,因此對(duì)于規(guī)格較大可運(yùn)行任務(wù)較多的節(jié)點(diǎn)需要保證NM進(jìn)程的內(nèi)存配置也較大(建議最小不低于1 GB)。
解決方案
如果節(jié)點(diǎn)資源足夠,建議適當(dāng)增大NM堆內(nèi)存(yarn-env.sh配置項(xiàng)YARN_NODEMANAGER_HEAPSIZE)。
檢查Shuffle Service相關(guān)配置是否合理,例如Spark Cache配置不應(yīng)該占用大部分堆內(nèi)存。
Direct buffer memory
原因
直接原因:堆外內(nèi)存溢出導(dǎo)致的OOM,通常與External Shuffle Service有關(guān),例如有的Shuffle Service服務(wù)的RPC調(diào)用使用了NIO DirectByteBuffer,就會(huì)用到堆外內(nèi)存。
原因分析:堆外內(nèi)存跟使用ShuffleService的應(yīng)用數(shù)或任務(wù)容器數(shù)成正比。對(duì)于使用Shuffle Service的任務(wù)較多的節(jié)點(diǎn),需要確認(rèn)NM進(jìn)程的堆外內(nèi)存配置是否過(guò)小。
解決方案
檢查堆外內(nèi)存配置-XX:MaxDirectMemorySize(yarn-env.sh配置項(xiàng)YARN_NODEMANAGER_OPTS)是否合理。無(wú)此配置時(shí)默認(rèn)與堆內(nèi)存大小相同,不合理時(shí)適當(dāng)調(diào)大堆外內(nèi)存空間。
unable to create new native thread
參見(jiàn)RM組件OOM如何處理?中的unable to create new native thread部分的內(nèi)容進(jìn)行分析解決。
ECS實(shí)例重啟后NM啟動(dòng)失敗:cgroup目錄丟失,如何處理?
詳細(xì)異常信息:ResourceHandlerException: Unexpected: Cannot create yarn cgroup Subsystem:cpu Mount point:/proc/mounts User:hadoop Path:/sys/fs/cgroup/cpu/hadoop-yarn
原因:ECS異常重啟可能是ECS內(nèi)核缺陷(已知問(wèn)題版本:4.19.91 -21.2.al7.x86_64)導(dǎo)致的。重啟后CPU cgroup失效問(wèn)題,原因是重啟后cgroup的內(nèi)存數(shù)據(jù)會(huì)被銷毀掉。
解決方案:修改存量集群節(jié)點(diǎn)執(zhí)行和擴(kuò)容節(jié)點(diǎn)的引導(dǎo)腳本,在當(dāng)前環(huán)境中創(chuàng)建cgroup目錄并且用rc.local在以后ECS啟動(dòng)的時(shí)候創(chuàng)建目錄。
# enable cgroups mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn # enable cgroups after reboot echo "mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local echo "chown -R hadoop:hadoop /sys/fs/cgroup/cpu/hadoop-yarn" >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local
修改NM resource配置,保存重啟后未生效,如何處理?
報(bào)錯(cuò)說(shuō)明:修改yarn.nodemanager.resource.cpu-vcores和yarn.nodemanager.resource.memory-mb參數(shù),保存重啟NM后,NM資源數(shù)未修改。
問(wèn)題原因:由于機(jī)器組可能使用不同CPU內(nèi)存規(guī)格的實(shí)例,所以修改yarn.nodemanager.resource.cpu-vcores和yarn.nodemanager.resource.memory-mb參數(shù),需要修改節(jié)點(diǎn)組維度的配置才能生效。
解決方案:在EMR控制臺(tái),選擇節(jié)點(diǎn)組維度,選擇需要配置的NM所在節(jié)點(diǎn)組修改資源數(shù)的配置,具體操作請(qǐng)參見(jiàn)管理配置項(xiàng)。
節(jié)點(diǎn)出現(xiàn)Unhealthy問(wèn)題,如何處理?
原因:
磁盤(pán)檢查發(fā)現(xiàn)異常:當(dāng)正常目錄數(shù)或總目錄數(shù)比率低于磁盤(pán)健康比例(yarn-site.xml配置項(xiàng)yarn.nodemanager.disk-health-checker.min-healthy-disks,默認(rèn)值:0.25)時(shí),將節(jié)點(diǎn)標(biāo)記為UnHealthy。例如NM節(jié)點(diǎn)使用4塊磁盤(pán),當(dāng)4塊磁盤(pán)上的目錄均不正常時(shí)節(jié)點(diǎn)才會(huì)標(biāo)記為UnHealthy,否則只在NM狀態(tài)報(bào)告中顯示local-dirs are bad或log-dirs are bad,參見(jiàn)節(jié)點(diǎn)磁盤(pán)問(wèn)題:local-dirs are bad/log-dirs are bad,如何處理?。
NM健康檢查腳本發(fā)現(xiàn)異常:該項(xiàng)檢查默認(rèn)未啟用,需要主動(dòng)配置健康檢查腳本(yarn-site.xml配置項(xiàng)yarn.nodemanager.health-checker.script.path)才能開(kāi)啟。
解決方案
磁盤(pán)問(wèn)題,請(qǐng)參見(jiàn)節(jié)點(diǎn)磁盤(pán)問(wèn)題:local-dirs are bad/log-dirs are bad,如何處理?中的解決方案。
健康檢查腳本問(wèn)題,請(qǐng)根據(jù)自定義腳本處理。
節(jié)點(diǎn)磁盤(pán)問(wèn)題:local-dirs are bad/log-dirs are bad,如何處理?
原因:磁盤(pán)檢查發(fā)現(xiàn)異常。該項(xiàng)檢查默認(rèn)開(kāi)啟,周期性檢查local-dirs(任務(wù)運(yùn)行緩存目錄,包括任務(wù)運(yùn)行依賴的各類文件、中間數(shù)據(jù)文件等)與log-dirs(任務(wù)運(yùn)行日志目錄,包含全部日志運(yùn)行)是否滿足以下條件,只要有一項(xiàng)不滿足就會(huì)被標(biāo)記為bad。
可讀
可寫(xiě)
可執(zhí)行
磁盤(pán)空間使用率是否低于配置閾值(yarn-site.xml配置項(xiàng)yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage,默認(rèn):90%)
磁盤(pán)剩余可用空間是否大于磁盤(pán)最小可用空間的配置值(yarn-site.xml配置項(xiàng)yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb,默認(rèn):0)
解決方案
一般都是磁盤(pán)空間不足引起,如果確認(rèn)存在下述場(chǎng)景之一,建議擴(kuò)容磁盤(pán):
NM節(jié)點(diǎn)規(guī)格較大,可運(yùn)行任務(wù)數(shù)較多。
磁盤(pán)空間相對(duì)較小。
任務(wù)運(yùn)行所依賴的數(shù)據(jù)或文件較大。
任務(wù)運(yùn)行產(chǎn)生的中間數(shù)據(jù)較多。
任務(wù)日志相對(duì)較大(磁盤(pán)空間占比高)。
檢查yarn-site.xml配置項(xiàng)yarn.nodemanager.localizer.cache.target-size-mb,如果相對(duì)磁盤(pán)比例過(guò)大會(huì)造成歷史任務(wù)緩存占用磁盤(pán)空間過(guò)多(超出配置值后才能自動(dòng)清理)。
壞盤(pán)問(wèn)題,請(qǐng)參見(jiàn)自助壞盤(pán)維修流程更換集群損壞的本地盤(pán)。
報(bào)錯(cuò)提示User [dr.who] is not authorized to view the logs for application ***,該如何處理?
問(wèn)題現(xiàn)象:打開(kāi)日志頁(yè)面時(shí),提示信息如下。
問(wèn)題原因:訪問(wèn)NodeManager Log頁(yè)面時(shí)會(huì)檢查ACL規(guī)則。如果啟用了ACL規(guī)則,遠(yuǎn)程用戶就要符合以下任一個(gè)條件:
是admin用戶。
是app owner。
滿足app自定義ACL規(guī)則。
處理方法:檢查是否滿足以上條件中的任一條。
報(bào)錯(cuò)提示HTTP ERROR 401 Authentication required或HTTP ERROR 403 Unauthenticated users are not authorized to access this page,該如何處理?
問(wèn)題現(xiàn)象:訪問(wèn)UI或REST API時(shí)報(bào)錯(cuò)HTTP ERROR 401或HTTP ERROR 403。HTTP ERROR 401詳細(xì)信息如下圖。
問(wèn)題原因:YARN啟用了Simple認(rèn)證且不允許匿名訪問(wèn),詳情請(qǐng)參見(jiàn)Authentication for Hadoop HTTP web-consoles。
處理方法:
方式一:URL參數(shù)中顯示指定遠(yuǎn)程用戶,例如,user.name=***。
方式二:您可以在E-MapReduce控制臺(tái)的HDFS服務(wù)的配置頁(yè)簽,在搜索區(qū)域搜索參數(shù)hadoop.http.authentication.simple.anonymous.allowed,修改其參數(shù)值為true允許匿名訪問(wèn),參數(shù)含義請(qǐng)參見(jiàn)Authentication for Hadoop HTTP web-consoles。然后重啟服務(wù),請(qǐng)參見(jiàn)重啟服務(wù)。
為什么TotalVcore顯示值不準(zhǔn)確?
在YARN UI右上方,Cluster或Metrics REST API結(jié)果中,TotalVcore顯示值不準(zhǔn)確。此問(wèn)題是由于社區(qū)2.9.2之前版本TotalVcore計(jì)算邏輯有問(wèn)題,詳情請(qǐng)參見(jiàn)https://issues.apache.org/jira/browse/YARN-8443。
EMR-3.37.x和EMR-5.3.x及后續(xù)版本已修復(fù)此問(wèn)題。
TEZ UI展示的應(yīng)用信息不全,該如何處理?
您可以打開(kāi)瀏覽器的開(kāi)發(fā)者工具,排查并處理遇到的問(wèn)題:
如果是路徑為http://<rmAddress>/ws/v1/cluster/apps/APPID的異常,則可能原因是該應(yīng)用已經(jīng)被RM清理出去(YARN RM最多保留一定數(shù)量的歷史應(yīng)用信息,默認(rèn)1000個(gè),超出的會(huì)將歷史應(yīng)用按啟動(dòng)順序清理出去)。
如果是路徑為http://<tsAddress>/ws/v1/applicationhistory/...的異常,直接訪問(wèn)該URL(http://<tsAddress>/ws/v1/applicationhistory/... )返回500異常(提示找不到app),則可能原因是該應(yīng)用信息未成功存儲(chǔ)(RM發(fā)起,查看yarn.resourcemanager.system-metrics-publisher.enabled配置項(xiàng)),或已被Timeline Store清理(查看LevelDB TTL相關(guān)配置)。
如果是路徑為http://<tsAddress>/ws/v1/timeline/...的異常,直接訪問(wèn)該URL(http://<tsAddress>/ws/v1/timeline/...)返回正常(code為200),但是內(nèi)容是NotFound信息。
查看AM日志(syslog)啟動(dòng)時(shí)打印信息,正常初始化信息如下:
[INFO] [main] |history.HistoryEventHandler|: Initializing HistoryEventHandler withrecoveryEnabled=true, historyServiceClassName=org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService [INFO] [main] |ats.ATSHistoryLoggingService|: Initializing ATSHistoryLoggingService with maxEventsPerBatch=5, maxPollingTime(ms)=10, waitTimeForShutdown(ms)=-1, TimelineACLManagerClass=org.apache.tez.dag.history.ats.acls.ATSHistoryACLPolicyManager
如果有以下異常信息,說(shuō)明AM運(yùn)行時(shí)yarn.timeline-service.enabled配置異常,可能原因?yàn)镕lowAgent問(wèn)題(FlowAgent里對(duì)Hive作業(yè)有2種實(shí)現(xiàn),一種是Hive命令,另外一種是Beeline命令,此時(shí)默認(rèn)配置yarn.timeline-service.enabled為false。)
[WARN] [main] |ats.ATSHistoryLoggingService|: org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService is disabled due to Timeline Service being disabled, yarn.timeline-service.enabled set to false
為什么YARN UI頁(yè)面有一個(gè)正在運(yùn)行的Spark Thrift JDBC/ODBC Server任務(wù)?
如果您在創(chuàng)建集群時(shí)選擇了Spark服務(wù),集群會(huì)自動(dòng)啟動(dòng)一個(gè)默認(rèn)的Spark Thrift Server服務(wù)。該服務(wù)會(huì)占用一個(gè)YARN Driver的資源。在Spark Thrift Server中運(yùn)行的任務(wù),默認(rèn)會(huì)通過(guò)該Driver向YARN申請(qǐng)所需的資源。
yarn.timeline-service.leveldb-timeline-store.path是否支持使用OSS地址?
yarn.timeline-service.leveldb-timeline-store.path參數(shù)不支持使用OSS地址。
如果您創(chuàng)建的是Hadoop集群,則yarn.timeline-service.leveldb-timeline-store.path的默認(rèn)值與hadoop.tmp.dir參數(shù)相同。請(qǐng)不要修改HDFS的hadoop.tmp.dir參數(shù),因?yàn)檫@會(huì)影響yarn.timeline-service.leveldb-timeline-store.path的配置。
Timeline Server連接超時(shí)、CPU或Memory占用異常高問(wèn)題,該如何處理?
在Tez任務(wù)特別多的情況下,寫(xiě)入YARN的Timeline Server時(shí),可能會(huì)出現(xiàn)連接超時(shí)的問(wèn)題。這是因?yàn)門(mén)imeline Server進(jìn)程占用大量CPU導(dǎo)致節(jié)點(diǎn)CPU使用率達(dá)到極限,進(jìn)而影響到了作業(yè)開(kāi)發(fā)和其他非核心業(yè)務(wù)(例如報(bào)表生成),所以臨時(shí)停止TimelineServer進(jìn)程來(lái)減輕節(jié)點(diǎn)的CPU負(fù)載。您可以通過(guò)修改以下配置項(xiàng)來(lái)解決此問(wèn)題。
在EMR控制臺(tái)修改Tez和YARN服務(wù)的相應(yīng)配置,新增或修改配置的具體操作,請(qǐng)參見(jiàn)管理配置項(xiàng)。
在EMR控制臺(tái)Tez服務(wù)的配置頁(yè)面的tez-site.xml頁(yè)簽,新增參數(shù)為tez.yarn.ats.event.flush.timeout.millis,參數(shù)值為60000的配置項(xiàng),該參數(shù)用來(lái)設(shè)置Tez任務(wù)將事件寫(xiě)入YARN的Timeline Server時(shí)的超時(shí)時(shí)間。
在EMR控制臺(tái)YARN服務(wù)的配置頁(yè)面的yarn-site.xml頁(yè)簽,新增或修改以下配置項(xiàng)。修改完配置項(xiàng)后需要在YARN服務(wù)的狀態(tài)頁(yè)面重啟下TimelineServer。
參數(shù)
參數(shù)值
說(shuō)明
yarn.timeline-service.store-class
org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore
用于指定YARN Timeline Server的事件存儲(chǔ)類。
yarn.timeline-service.rolling-period
daily
用于設(shè)置YARN Timeline Server的事件滾動(dòng)周期
yarn.timeline-service.leveldb-timeline-store.read-cache-size
4194304
用于設(shè)置YARN Timeline Server LevelDB存儲(chǔ)的讀取緩存大小。
yarn.timeline-service.leveldb-timeline-store.write-buffer-size
4194304
用于設(shè)置YARN Timeline Server LevelDB存儲(chǔ)的寫(xiě)入緩沖區(qū)大小。
yarn.timeline-service.leveldb-timeline-store.max-open-files
500
用于設(shè)置YARN Timeline Server LevelDB存儲(chǔ)的最大打開(kāi)文件數(shù)。