日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

本文匯總了YARN使用時的常見問題。

集群有狀態(tài)重啟包括哪些內(nèi)容?

集群有狀態(tài)重啟包括RM RestartNM Restart兩部分,ResourceManager(簡稱RM)負責維護應(yīng)用級基礎(chǔ)信息與狀態(tài),NodeManager(簡稱NM)負責維護運行時的Container信息與狀態(tài),它們持續(xù)將相關(guān)狀態(tài)同步至外部存儲(Zookeeper、LevelDB和HDFS等),并在重啟后重新加載狀態(tài)自行恢復(fù),保證集群升級或重啟后應(yīng)用自動恢復(fù),通常情況下可以做到應(yīng)用無感知。

如何啟用RM HA?

您可以在EMR控制臺YARN服務(wù)的配置頁簽,檢查或者配置以下參數(shù)啟用RM HA。

參數(shù)

描述

yarn.resourcemanager.ha.enabled

設(shè)置為true,表示開啟HA。

默認值為false。

yarn.resourcemanager.ha.automatic-failover.enabled

使用默認值true,表示啟用自動切換。

yarn.resourcemanager.ha.automatic-failover.embedded

使用默認值true,表示使用嵌入的自動切換方式。

yarn.resourcemanager.ha.curator-leader-elector.enabled

設(shè)置為true,表示使用curator組件。

默認值為false。

yarn.resourcemanager.ha.automatic-failover.zk-base-path

使用默認值/yarn-leader-electionleader-elector

如何配置熱更新?

重要

以下操作內(nèi)容適用于Hadoop 3.2.0及后續(xù)版本。

  1. 開啟關(guān)鍵配置。

    您可以在EMR控制臺YARN服務(wù)的配置頁簽,檢查或者配置以下參數(shù)。

    參數(shù)

    描述

    參數(shù)值(推薦)

    yarn.scheduler.configuration.store.class

    使用的后備存儲的類型。例如,設(shè)置為fs,表示使用FileSystem類型存儲。

    fs

    yarn.scheduler.configuration.max.version

    保留歷史版本的最大數(shù)量,超出自動清理。

    100

    yarn.scheduler.configuration.fs.path

    capacity-scheduler.xml文件存儲路徑。

    不存在存儲路徑時,則自動創(chuàng)建。不指定前綴時,則默認defaultFs的相對路徑。

    /yarn/<集群名>/scheduler/conf

    重要

    將<集群名>替換為集群名稱以便區(qū)分,可能有多個YARN集群對應(yīng)同一分布式存儲的情況。

  2. 查看capacity-scheduler.xml配置。

    • 方式一(REST API):http://<rm-address>/ws/v1/cluster/scheduler-conf。

    • 方式二(HDFS文件):${yarn.scheduler.configuration.fs.path}/capacity-scheduler.xml.<timestamp>,其中后綴<timestamp>值最大的文件是最新的配置文件。

  3. 更新配置。

    示例:更新一個配置項yarn.scheduler.capacity.maximum-am-resource-percent,并刪除配置項yarn.scheduler.capacity.xxx,刪除某配置項只需去掉其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)部資源通常會被大作業(yè)占據(jù),小作業(yè)較難獲得資源,希望各作業(yè)能公平獲得資源。您可以通過以下步驟處理:

  1. 修改Queue配置yarn.scheduler.capacity.<queue-path>.ordering-policy,使其調(diào)度次序由fifo(默認值)改為fair

    說明

    FIFO Scheduler為先進先出調(diào)度器,F(xiàn)air Scheduler為公平調(diào)度器。

    您還可以修改參數(shù)yarn.scheduler.capacity.<queue-path>.ordering-policy.fair.enable-size-based-weight,該參數(shù)默認值false,表示按used資源值從小到大排序,參數(shù)值為true時表示按照used或demand計算值從小到大排序。

  2. 開啟隊列內(nèi)搶占。

    隊列內(nèi)搶占常用參數(shù)如下表所示。

    參數(shù)

    描述

    參數(shù)值(推薦)

    yarn.resourcemanager.scheduler.monitor.enable

    搶占功能總開關(guān),在yarn-site.xml中配置,其余參數(shù)是在capacity-scheduler.xml中配置。

    true

    yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.enabled

    隊列內(nèi)搶占開關(guān)(隊列間搶占無開關(guān),默認開啟)。

    true

    yarn.resourcemanager.monitor.capacity.preemption.intra-queue-preemption.preemption-order-policy

    搶占策略優(yōu)先考慮應(yīng)用優(yōu)先級,默認值為userlimit_first。

    priority_first

    yarn.scheduler.capacity.<queue-path>.disable_preemption

    指定Queue不被搶占,默認false。

    true表示不允許指定Queue資源被搶占,子Queue未配置則繼承父Queue配置值。

    true

    yarn.scheduler.capacity.<queue-path>.intra-queue-preemption.disable_preemption

    指定Queue不開啟隊列內(nèi)搶占,默認值false。

    true表示禁用Queue內(nèi)搶占,子Queue未配置則繼承父Queue配置值。

    true

如何查看隊列資源使用情況?

要查看隊列資源使用情況,您可以在YARN WebUI頁面查看Used Capacity參數(shù)。Used Capacity參數(shù)表示該隊列已使用的資源占該隊列整體資源的百分比,分別計算Memory和vCores占總體的比例,并選取最大值作為隊列整體資源使用的比例。具體查看操作如下:

  1. 訪問YARN UI,詳情請參見訪問鏈接與端口

  2. All Applications頁面,單擊目標作業(yè)的ID。

  3. 單擊Queue行的隊列。

    Application Queues區(qū)域,可以查看隊列資源使用情況。

    image.png

YARN服務(wù)組件.out日志為何會大量堆積且無法自動清理?

  • 問題原因:Hadoop組件部分依賴庫使用Java Logging APIs來生成日志記錄,不支持使用log4j配置的日志輪轉(zhuǎn)。目前這些daemon組件的stderr輸出被重定向到.out文件中,沒有自動清理機制,長時間積累可能導致數(shù)據(jù)盤存儲空間被占滿。

  • 處理方法:可以使用headtail命令結(jié)合日志中生成的時間戳信息,來判斷是否由于Java Logging APIs生成的日志導致存儲空間占用過大。通常情況下,這些依賴庫產(chǎn)生的都是INFO級別日志,不影響組件正常功能使用,但為了避免數(shù)據(jù)盤存儲空間被占用,可以采取修改配置的方式禁用此類日志的生成。

    例如,在優(yōu)化TimelineServer組件以關(guān)閉jersey依賴庫的日志生成時,操作步驟如下:

    1. 通過以下命令,監(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)生的記錄。

      image.png

    2. 為了禁止組件輸出Jersey庫的INFO級別日志到.out 文件,創(chuàng)建并配置一個文件來關(guān)閉其日志生成。在運行有TimelineServer組件的EMR節(jié)點上,可以通過執(zhí)行以下命令以root權(quán)限創(chuàng)建并編輯配置文件。

      sudo su root -c "echo 'com.sun.jersey.level = OFF' > $HADOOP_CONF_DIR/off-logging.properties"
    3. 在EMR控制臺中YARN服務(wù)的配置頁面,查找YARN_TIMELINESERVER_OPTS參數(shù)(Hadoop集群為yarn_timelineserver_opts),并在此參數(shù)值后添加-Djava.util.logging.config.file=off-logging.properties,指定剛剛創(chuàng)建的配置文件位置。

      image

    4. 保存上述配置更改后,重啟TimelineServer組件使新設(shè)置生效。持續(xù)觀察一段時間,如果TimelineServer組件正常啟動,并且.out日志中不再出現(xiàn)任何與com.sun.jersey相關(guān)的日志信息,則說明關(guān)閉jersey依賴庫日志的操作已成功完成。

如何檢查ResourceManager服務(wù)是否正常?

您可以通過以下方式檢查:

  • 檢查ResourceManager HA狀態(tài)(如果集群已啟用HA,需確保有且只有一個Active ResourceManager),以下方式任選一種,檢查字段haState是否為ACTIVE或STANDBY,haZooKeeperConnectionState是否為CONNECTED:

    • 命令行:yarn rmadmin -getAllServiceState

    • REST API:http://<rmAddress>/ws/v1/cluster/info

    示例如下。RM-1

  • 檢查應(yīng)用狀態(tài)。

    執(zhí)行以下命令,查看是否有持續(xù)的SUBMITTED或ACCEPTED狀態(tài)。

    yarn application -list
  • 查看提交的新應(yīng)用是否可以正常運行并結(jié)束。命令示例如下。

    hadoop jar <hadoop_home>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-*-tests.jar sleep -m 1 -mt 1000 -r 0

    您可以在sleep -m之間新增配置項以指定Queue,新增的參數(shù)為-Dmapreduce.job.queuename,參數(shù)值為default。

如何了解應(yīng)用運行狀況?

您可以查看以下信息。

查詢信息

描述

基本信息

包括ID、User、Name、Application Type、State、Queue、App-Priority、StartTime、FinishTime、State、FinalStatus、Running Containers、Allocated CPU VCores、Allocated Memory MB和Diagnostics(診斷信息)等。

  • App列表頁:http://<rmAddress>/cluster/apps。

  • App詳情頁(在App列表頁面,單擊App ID進入): http://<rmAddress>/cluster/app/<applicationId>。

  • App Attempt詳情頁(在App詳情頁面,單擊App Attempt ID進入):http://<rmAddress>/cluster/appattempt/<appAttemptId>。

  • App REST API:http://<rmAddress>/ws/v1/cluster/apps/<applicationId>。

  • App Attempts REST API: http://<rmAddress>/ws/v1/cluster/apps/<applicationId>/appattempts。

Queue信息

  • Scheduler頁面(葉子節(jié)點展開):http://<rmAddress>/cluster/scheduler。

  • Scheduler REST API:http://<rmAddress>/ws/v1/cluster/scheduler。

Container日志

  • RUNNING Applications

    • 通過NodeManager Log頁面查看:http://<nmHost>:8042/node/containerlogs/<containerId>/<user>。

    • 在運行節(jié)點${yarn.nodemanager.local-dirs}目錄下查找<containerId>子目錄。

  • Finished Applications

    • 通過yarn logs -applicationId <applicationId> -appOwner <user> -containerId <containerId>命令查詢。

    • 通過HDFS命令hadoop fs -ls /logs/<user>/logs/<applicationId>查詢。

應(yīng)用問題排查流程

  1. 檢查App狀態(tài),通過App詳情頁或App REST API檢查App狀態(tài)。

    • 未找到App狀態(tài),可能原因:

      • 客戶端向YARN提交之前失敗退出:客戶端組件問題(檢查提交客戶端日志:BRS、flowagent等組件)。

      • 客戶端無法連接YARN RM:檢查連接RM地址是否正確、網(wǎng)絡(luò)是否存在問題。如有網(wǎng)絡(luò)問題,客戶端可能存在報錯: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寫入應(yīng)用信息階段。持續(xù)該狀態(tài)可能原因如下:

    • SUBMITTED:該狀態(tài)極少遇到,可能原因為Node Update請求太多造成Capacity Scheduler內(nèi)部搶鎖堵塞,通常發(fā)生在大規(guī)模集群,需優(yōu)化相關(guān)流程。相關(guān)案例,請參見YARN-9618

    • ACCEPTED:檢查Diagnostics。請根據(jù)提示信息,選擇相應(yīng)的處理方式。

      • 報錯提示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。

      • 報錯提示User's AM resource limit exceeded。

        • 可能原因:Queue user AM已使用資源和AM資源之和超出了Queue user AM資源上限。

        • 處理方法:提高user-limit比例。您可以修改參數(shù)yarn.scheduler.capacity.<queue-path>.user-limit-factoryarn.scheduler.capacity.<queue-path>.minimum-user-limit-percent的參數(shù)值。

      • 報錯提示AM container is launched, waiting for AM container to Register with RM。

        • 可能原因:AM已啟動,內(nèi)部初始化未完成(例如,Zookeeper連接超時等)。

        • 處理方法:需要根據(jù)AM日志進一步排查問題。

      • 報錯提示Application is Activated, waiting for resources to be assigned for AM。

        執(zhí)行步驟3,檢查AM資源分配為何未滿足。

    • RUNNING:執(zhí)行步驟2,檢查Container資源請求是否完成。

    • FAILED:檢查diagnostics。請根據(jù)提示信息,選擇相應(yīng)的處理方式。

      • 報錯提示Maximum system application limit reached,cannot accept submission of application

        • 可能原因:集群內(nèi)運行中的總應(yīng)用數(shù)超過上限(配置項:yarn.scheduler.capacity.maximum-applications,默認值:10000)。

        • 處理方法:檢查JMX Metrics,確認各隊列運行的應(yīng)用數(shù)是否符合預(yù)期,找出并處理有大量重復(fù)提交的問題應(yīng)用。如果應(yīng)用都正常,可以根據(jù)集群水位情況適當調(diào)大上述配置。

      • 報錯提示Application XXX submitted by user YYY to unknown queue: ZZZ

        • 可能原因:提交到不存在的queue。

        • 處理方法:提交到已存在的leaf queue。

      • 報錯提示Application XXX submitted by user YYY to non-leaf queue: ZZZ

        • 可能原因:提交到parent queue。

        • 處理方法:提交到已存在的leaf queue。

      • 報錯提示Queue XXX is STOPPED. Cannot accept submission of application: YYY

        • 可能原因:提交到STOPPED或DRAINING queue(已下線或正在下線的queue)。

        • 處理方法:提交到RUNNING queue(工作狀態(tài)正常的queue)。

      • 報錯提示Queue XXX already has YYY applications, cannot accept submission of application: ZZZ

        • 可能原因:queue應(yīng)用數(shù)達到上限。

        • 處理方法:

          1. 檢查queue內(nèi)是否有大量重復(fù)提交的問題應(yīng)用。

          2. 調(diào)整配置:yarn.scheduler.capacity.<queue-path>.maximum-applications。

      • 報錯提示Queue XXX already has YYY applications from user ZZZ cannot accept submission of application: AAA

        • 可能原因:user應(yīng)用數(shù)達到上限。

        • 處理方法:

          1. 檢查該user是否有大量重復(fù)提交的問題應(yīng)用。

          2. 調(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。

  2. 確認YARN資源分配還未完成。

    1. 在apps列表頁,單擊appID進入AM頁面。

    2. 單擊下方列表的AM-ID,進入AM-Attempt頁面。

    3. 查看Total Outstanding Resource Requests列表中是否有Pending資源(也可以通過PendingRequests REST API查詢):

      • 沒有Pending資源:說明YARN已分配完畢,退出該檢查流程,檢查AM情況。AM-Attempt

      • 有Pending資源:說明YARN資源分配未完成,繼續(xù)下一步檢查。

  3. 資源限制檢查。

    檢查集群或Queue資源,查看資源信息,例如,Effective Max Resource和Used Resources。

    1. 檢查集群資源或所在Queue資源或其父Queue資源是否已用完。

    2. 檢查葉子隊列某維度資源是否接近或達到上限。

    3. 當集群資源接近用滿時(例如85%以上),應(yīng)用的分配速度可能會變慢,因為大部分機器都沒有資源了,分配的機器沒有資源就會reserve,reserve到一定個數(shù)后分配就會變慢,另外也可能是由于內(nèi)存資源和CPU資源不成比例,例如,有的機器上內(nèi)存資源有空閑但CPU資源已經(jīng)用滿,有的機器上CPU資源有空閑但內(nèi)存已經(jīng)用滿。

  4. 檢查是否存在Container資源分配成功但啟動失敗的情況,YARN UI的App Attempt頁面可以看到已分配的Container數(shù)(間隔一小段時間觀察是否變化),如果有Container啟動失敗,查看對應(yīng)的NM日志或Container日志進一步排查失敗原因。

  5. 動態(tài)修改日志級別:在YARN UI的logLevel頁面(http://RM_IP:8088/logLevel),將org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity(CapacityScheduler調(diào)度邏輯所在的package)參數(shù)的日志級別改為DEBUG,如下圖所示。動態(tài)修改日志級別

    重要

    您需要在復(fù)現(xiàn)問題的同時打開,持續(xù)幾十秒(由于日志刷新的很快,無需持續(xù)太長時間),日志級別改回INFO即可恢復(fù)。

單任務(wù)/容器(Container)最大可用資源由哪些配置項決定?

由調(diào)度器或隊列(queue)配置項決定:

配置項

配置說明

默認值

yarn.scheduler.maximum-allocation-mb

集群級最大可調(diào)度內(nèi)存資源,單位:MB。

EMR默認值為:創(chuàng)建集群時最大非master實例組的可用內(nèi)存(與最大實例組的 yarn.nodemanager.resource.memory-mb參數(shù)的配置值相同)。

yarn.scheduler.maximum-allocation-vcores

集群級最大可調(diào)度CPU資源,單位:VCore。

EMR默認值為32。

yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb

指定隊列的最大可調(diào)度內(nèi)存資源,單位:MB。

默認未配置,配置則覆蓋集群級配置,僅對指定隊列生效。

yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores

指定隊列的最大可調(diào)度CPU資源,單位:VCore。

默認未配置,配置則覆蓋集群級配置,僅對指定隊列生效。

說明

如果申請資源超過單任務(wù)或容器(Container)的最大可用資源配置,應(yīng)用日志中能夠發(fā)現(xiàn)異常信息InvalidResourceRequestException: Invalid resource request…

YARN配置修改未生效,如何處理?

  • 可能原因

    • 非熱更新配置,配置關(guān)聯(lián)的組件未重啟。

    • 熱更新配置,配置生效所需的指定操作未執(zhí)行。

  • 解決方案:請確保相關(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組件運行配置。

    重啟配置關(guān)聯(lián)組件。例如:

    • 修改配置yarn-env.sh中的YARN_RESOURCEMANAGER_HEAPSIZE、yarn-site.xml中的yarn.resourcemanager.nodes.exclude-path等配置項后,需重啟RM。

    • 修改配置yarn-env.sh中的YARN_NODEMANAGER_HEAPSIZE、yarn-site.xml中的yarn.nodemanager.log-dirs等配置項后,需重啟NM。

    • 修改配置mapred-env.sh中的MAPRED_HISTORYSERVER_OPTS、mapred-site.xml中的mapreduce.jobhistory.http.policys等配置項后,需重啟MRHistoryServer。

客戶端異常,提示Exception while invoking getClusterNodes of class ApplicationClientProtocolPBClientImpl over rm2 after 1 fail over attempts. Trying to fail over immediately

  • 問題現(xià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。

  • 問題原因:Hadoop版本太舊,導致客戶端RPC版本不兼容。

  • 處理方法:使用匹配的Hadoop版本。

RM處于Standby狀態(tài),無法自動恢復(fù)Active狀態(tài),該如何處理?

您可以通過以下方式排查問題:

  1. 檢查支持自動恢復(fù)的必選配置項是否配置正確。

    參數(shù)

    描述

    yarn.resourcemanager.ha.enabled

    需要配置為true

    yarn.resourcemanager.ha.automatic-failover.enabled

    需要配置為true

    yarn.resourcemanager.ha.automatic-failover.embedded

    需要配置為true

  2. 修改為上述配置后,問題還未解決,您可以通過以下方式排查問題:

    • 檢查Zookeeper服務(wù)是否正常。

    • 檢查Zookeeper客戶端(RM)讀取數(shù)據(jù)是否超出其Buffer上限。

      • 問題現(xiàn)象:RM日志內(nèi)存在異常,提示Zookeeper error len*** is out of range!或Unreasonable length = ***。

      • 處理方法:在EMR控制臺YARN服務(wù)的配置頁面,單擊yarn-env頁簽,更新參數(shù)yarn_resourcemanager_opts的參數(shù)值為-Djute.maxbuffer=4194304 ,然后重啟RM。

    • Zookeeper服務(wù)端寫入數(shù)據(jù)是否超出其Buffer上限。

      • 問題現(xiàn)象:Zookeeper日志內(nèi)存在異常,提示Exception causing close of session 0x1000004d5701b6a: Len error ***。

      • 處理方法:Zookeeper服務(wù)各節(jié)點新增或更新配置項-Djute.maxbuffer= (單位:bytes) ,將Buffer上限調(diào)大超過異常顯示的長度。

    • 如果RM或Zookeeper日志都找不到異常,可能是因為RM選主Zookeeper Ephemeral Node(${yarn.resourcemanager.zk-state-store.parent-path}/${yarn.resourcemanager.cluster-id}/ActiveStandbyElectorLock)被其他Session持有未釋放,可在zkCli命令窗口中stat該節(jié)點確認,默認選主方式可能存在未知問題或觸發(fā)Zookeeper問題。

      建議修改選主方式,在yarn-site頁簽中,新增或更新配置項yarn.resourcemanager.ha.curator-leader-elector.enabled為true ,然后重啟RM。

RM組件OOM如何處理?

RM OOM包括多種問題類型,您需要先根據(jù)RM日志確定問題類型,可能的問題類型及對應(yīng)的原因和解決方案如下:

  • Java heap space或GC overhead limit exceeded或頻繁FullGC

    • 原因

      • 直接原因:JVM堆空間不足,RM進程內(nèi)部對象無法獲取到足夠的資源,并且在拋出OOM之前已經(jīng)進行過一輪或多輪FullGC回收了失效的對象,仍無法獲取足夠的堆空間用于分配。

      • 原因分析:RM有很多常駐對象(不能被JVM回收的對象),包括集群、隊列(queue)、應(yīng)用、執(zhí)行任務(wù)容器(container)、節(jié)點(node)等各類信息。這些信息占用的堆空間隨著集群規(guī)模增大而增大,因此對于規(guī)模較大的集群需要保證RM進程的內(nèi)存配置也較大。另一方面,由于需要保留應(yīng)用的歷史信息,隨著時間推移歷史應(yīng)用占用的存儲空間越來越大,即使是只有1個節(jié)點的最小規(guī)模集群,也需要確保有一定的存儲空間(建議不低于2 GB)。

    • 解決方案

      • 如果Master節(jié)點資源足夠,建議適當增大RM堆內(nèi)存(yarn-env.sh配置項YARN_RESOURCEMANAGER_HEAPSIZE)。

      • 對于小規(guī)模集群,也可以考慮適當減小需要存儲的歷史應(yīng)用數(shù)量(yarn-site.xml配置項yarn.resourcemanager.max-completed-applications,默認:10000)。

  • unable to create new native thread

    • 原因:RM所在節(jié)點上已用的總線程數(shù)達到系統(tǒng)上限,無法創(chuàng)建新的線程。

      線程數(shù)上限由用戶最大可用線程數(shù)(查看命令:ulimit -a | grep "max user processes")和PID最大可用數(shù)(查看命令:cat /proc/sys/kernel/pid_max)決定。

    • 解決方案

      • 如果可用線程數(shù)配置過低,調(diào)大相關(guān)系統(tǒng)配置。通常規(guī)格小的節(jié)點可用線程數(shù)需配置數(shù)萬量級,規(guī)格大的節(jié)點需配置十幾萬或幾十萬量級。

      • 如果可用線程數(shù)配置正常,通常是節(jié)點上存在個別問題進程占用過多線程導致,可以進一步定位哪些進程占用線程較多。

        執(zhí)行命令:ps -eLf | awk '{print $2}' | uniq -c | awk '{print $2"\t"$1}' | sort -nrk2 | head ,查看占用線程數(shù)最多的Top10進程,格式:[進程ID] [占用線程數(shù)]。

為什么節(jié)點啟動任務(wù)時Localize失敗或任務(wù)日志無法采集與刪除?

  • 問題現(xiàn)象:NM日志異常,提示java.io.IOException: Couldn't create proxy provider class org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider。

  • 可能原因:HDFS配置異常。

  • 處理方法:

    1. 以上是封裝后的異常,非根因,需要打開DEBUG級別日志查看:

      • hadoop客戶端命令行環(huán)境(例如執(zhí)行hadoop fs -ls /命令),開啟DEBUG調(diào)試信息。

        export HADOOP_LOGLEVEL=DEBUG
      • 有Log4j配置的運行環(huán)境,Log4j末尾增加log4j.logger.org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider=DEBUG

    2. 以下示例的根因是用戶曾修改過NameServices配置,將emr-cluster修改為了hadoop-emr-cluster,但是擴容節(jié)點時使用了修改前的配置。nameservices

    3. 在EMR控制臺HDFS服務(wù)的配置頁面,檢查各項配置是否正確。

資源本地化異常,該如何處理?

  • 問題現(xiàn)象:

    • Job AM Container啟動失敗,異常信息如下。

      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
    • 在資源本地化過程中(下載后解壓時)報錯,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)
  • 問題原因:壓縮包內(nèi)含有軟鏈接導致資源本地化異常。

  • 處理方法:刪除該壓縮包內(nèi)包含的軟鏈接。

Container啟動失敗或運行異常,報錯提示No space left on device,該如何處理?

可能原因及排查思路如下:

  • 磁盤已滿。

  • 檢查/sys/fs/cgroup/cpu/hadoop-yarn/cgroup.clone_children/sys/fs/cgroup/cpu/cgroup.clone_children的Cgroups配置。

    1. 如果cgroup.clone_children的值為0,請修改為1,開機啟動項時,設(shè)置命令echo 1 > /sys/fs/cgroup/cpu/cgroup.clone_children

    2. 如果沒有上述問題,請檢查同級的cpuset.memscpuset.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é)點NM服務(wù)或任務(wù)運行時無法正常解析域名,該如何處理?

  • 問題現(xiàn)象:報錯提示java.net.UnknownHostException: Invalid host name: local host is: (unknown)。

  • 問題原因及處理方法:

    • 查看是否正確配置了DNS服務(wù)器。

      通過以下命令,檢查配置信息。

      cat /etc/resolv.conf
    • 查看防火墻是否設(shè)置了53端口的相關(guān)規(guī)則。

      如果設(shè)置了,請關(guān)閉防火墻。

    • 查看是否開啟了DNS的NSCD緩存服務(wù)。

      通過以下命令,檢查服務(wù)狀態(tài)。

      systemctl status nscd

      如果開啟了DNS的NSCD緩存服務(wù),可以執(zhí)行以下命令,停止緩存服務(wù)。

      systemctl stop nscd

NM組件OOM如何處理?

NM OOM包括多種問題類型,您需要先根據(jù)NM日志確定問題類型,可能的問題類型及對應(yīng)的原因和解決方案如下:

  • Java heap space或GC overhead limit exceeded或頻繁FullGC

    • 原因

      • 直接原因:JVM堆空間不足,NM進程內(nèi)部對象無法獲取到足夠的資源,并且在拋出OOM之前已經(jīng)進行過一輪或多輪FullGC回收了失效的對象,仍無法獲取足夠的堆空間用于分配。

      • 原因分析:NM進程中的常駐對象不多,一般只包含當前節(jié)點、運行應(yīng)用、執(zhí)行任務(wù)容器(Container)等基本信息,這部分占用空間不會很大。可能占用空間較大的是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īng)用數(shù)(或執(zhí)行任務(wù)容器數(shù))成正比。這些信息占用的堆空間隨著使用ShuffleService應(yīng)用數(shù)或任務(wù)容器數(shù)的增大而增大,因此對于規(guī)格較大可運行任務(wù)較多的節(jié)點需要保證NM進程的內(nèi)存配置也較大(建議最小不低于1 GB)。

    • 解決方案

      • 如果節(jié)點資源足夠,建議適當增大NM堆內(nèi)存(yarn-env.sh配置項YARN_NODEMANAGER_HEAPSIZE)。

      • 檢查Shuffle Service相關(guān)配置是否合理,例如Spark Cache配置不應(yīng)該占用大部分堆內(nèi)存。

  • Direct buffer memory

    • 原因

      • 直接原因:堆外內(nèi)存溢出導致的OOM,通常與External Shuffle Service有關(guān),例如有的Shuffle Service服務(wù)的RPC調(diào)用使用了NIO DirectByteBuffer,就會用到堆外內(nèi)存。

      • 原因分析:堆外內(nèi)存跟使用ShuffleService的應(yīng)用數(shù)或任務(wù)容器數(shù)成正比。對于使用Shuffle Service的任務(wù)較多的節(jié)點,需要確認NM進程的堆外內(nèi)存配置是否過小。

    • 解決方案

      檢查堆外內(nèi)存配置-XX:MaxDirectMemorySize(yarn-env.sh配置項YARN_NODEMANAGER_OPTS)是否合理。無此配置時默認與堆內(nèi)存大小相同,不合理時適當調(diào)大堆外內(nèi)存空間。

  • unable to create new native thread

    參見RM組件OOM如何處理?中的unable to create new native thread部分的內(nèi)容進行分析解決。

ECS實例重啟后NM啟動失敗:cgroup目錄丟失,如何處理?

  • 詳細異常信息: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)核缺陷(已知問題版本:4.19.91 -21.2.al7.x86_64)導致的。重啟后CPU cgroup失效問題,原因是重啟后cgroup的內(nèi)存數(shù)據(jù)會被銷毀掉。

  • 解決方案:修改存量集群節(jié)點執(zhí)行和擴容節(jié)點的引導腳本,在當前環(huán)境中創(chuàng)建cgroup目錄并且用rc.local在以后ECS啟動的時候創(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配置,保存重啟后未生效,如何處理?

  • 報錯說明:修改yarn.nodemanager.resource.cpu-vcoresyarn.nodemanager.resource.memory-mb參數(shù),保存重啟NM后,NM資源數(shù)未修改。

  • 問題原因:由于機器組可能使用不同CPU內(nèi)存規(guī)格的實例,所以修改yarn.nodemanager.resource.cpu-vcoresyarn.nodemanager.resource.memory-mb參數(shù),需要修改節(jié)點組維度的配置才能生效。

  • 解決方案:在EMR控制臺,選擇節(jié)點組維度,選擇需要配置的NM所在節(jié)點組修改資源數(shù)的配置,具體操作請參見管理配置項修改NM配置

節(jié)點出現(xiàn)Unhealthy問題,如何處理?

  • 原因:

    • 磁盤檢查發(fā)現(xiàn)異常:當正常目錄數(shù)或總目錄數(shù)比率低于磁盤健康比例(yarn-site.xml配置項yarn.nodemanager.disk-health-checker.min-healthy-disks,默認值:0.25)時,將節(jié)點標記為UnHealthy。例如NM節(jié)點使用4塊磁盤,當4塊磁盤上的目錄均不正常時節(jié)點才會標記為UnHealthy,否則只在NM狀態(tài)報告中顯示local-dirs are bad或log-dirs are bad,參見節(jié)點磁盤問題:local-dirs are bad/log-dirs are bad,如何處理?

    • NM健康檢查腳本發(fā)現(xiàn)異常:該項檢查默認未啟用,需要主動配置健康檢查腳本(yarn-site.xml配置項yarn.nodemanager.health-checker.script.path)才能開啟。

  • 解決方案

節(jié)點磁盤問題:local-dirs are bad/log-dirs are bad,如何處理?

  • 原因:磁盤檢查發(fā)現(xiàn)異常。該項檢查默認開啟,周期性檢查local-dirs(任務(wù)運行緩存目錄,包括任務(wù)運行依賴的各類文件、中間數(shù)據(jù)文件等)與log-dirs(任務(wù)運行日志目錄,包含全部日志運行)是否滿足以下條件,只要有一項不滿足就會被標記為bad。

    • 可讀

    • 可寫

    • 可執(zhí)行

    • 磁盤空間使用率是否低于配置閾值(yarn-site.xml配置項yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage,默認:90%)

      磁盤剩余可用空間是否大于磁盤最小可用空間的配置值(yarn-site.xml配置項yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb,默認:0)

  • 解決方案

    • 一般都是磁盤空間不足引起,如果確認存在下述場景之一,建議擴容磁盤:

      • NM節(jié)點規(guī)格較大,可運行任務(wù)數(shù)較多。

      • 磁盤空間相對較小。

      • 任務(wù)運行所依賴的數(shù)據(jù)或文件較大。

      • 任務(wù)運行產(chǎn)生的中間數(shù)據(jù)較多。

      • 任務(wù)日志相對較大(磁盤空間占比高)。

    • 檢查yarn-site.xml配置項yarn.nodemanager.localizer.cache.target-size-mb,如果相對磁盤比例過大會造成歷史任務(wù)緩存占用磁盤空間過多(超出配置值后才能自動清理)。

    • 壞盤問題,請參見自助壞盤維修流程更換集群損壞的本地盤

報錯提示User [dr.who] is not authorized to view the logs for application ***,該如何處理?

  • 問題現(xiàn)象:打開日志頁面時,提示信息如下。ERROR_info

  • 問題原因:訪問NodeManager Log頁面時會檢查ACL規(guī)則。如果啟用了ACL規(guī)則,遠程用戶就要符合以下任一個條件:

    • 是admin用戶。

    • 是app owner。

    • 滿足app自定義ACL規(guī)則。

  • 處理方法:檢查是否滿足以上條件中的任一條。

報錯提示HTTP ERROR 401 Authentication required或HTTP ERROR 403 Unauthenticated users are not authorized to access this page,該如何處理?

  • 問題現(xiàn)象:訪問UI或REST API時報錯HTTP ERROR 401或HTTP ERROR 403。HTTP ERROR 401詳細信息如下圖。

    ERROR 401

  • 問題原因:YARN啟用了Simple認證且不允許匿名訪問,詳情請參見Authentication for Hadoop HTTP web-consoles

  • 處理方法:

    • 方式一:URL參數(shù)中顯示指定遠程用戶,例如,user.name=***。

    • 方式二:您可以在E-MapReduce控制臺的HDFS服務(wù)的配置頁簽,在搜索區(qū)域搜索參數(shù)hadoop.http.authentication.simple.anonymous.allowed,修改其參數(shù)值為true允許匿名訪問,參數(shù)含義請參見Authentication for Hadoop HTTP web-consoles。然后重啟服務(wù),請參見重啟服務(wù)

為什么TotalVcore顯示值不準確?

在YARN UI右上方,Cluster或Metrics REST API結(jié)果中,TotalVcore顯示值不準確。此問題是由于社區(qū)2.9.2之前版本TotalVcore計算邏輯有問題,詳情請參見https://issues.apache.org/jira/browse/YARN-8443

EMR-3.37.x和EMR-5.3.x及后續(xù)版本已修復(fù)此問題。

TEZ UI展示的應(yīng)用信息不全,該如何處理?

您可以打開瀏覽器的開發(fā)者工具,排查并處理遇到的問題:

  1. 如果是路徑為http://<rmAddress>/ws/v1/cluster/apps/APPID的異常,則可能原因是該應(yīng)用已經(jīng)被RM清理出去(YARN RM最多保留一定數(shù)量的歷史應(yīng)用信息,默認1000個,超出的會將歷史應(yīng)用按啟動順序清理出去)。

  2. 如果是路徑為http://<tsAddress>/ws/v1/applicationhistory/...的異常,直接訪問該URL(http://<tsAddress>/ws/v1/applicationhistory/... )返回500異常(提示找不到app),則可能原因是該應(yīng)用信息未成功存儲(RM發(fā)起,查看yarn.resourcemanager.system-metrics-publisher.enabled配置項),或已被Timeline Store清理(查看LevelDB TTL相關(guān)配置)。

  3. 如果是路徑為http://<tsAddress>/ws/v1/timeline/...的異常,直接訪問該URL(http://<tsAddress>/ws/v1/timeline/...)返回正常(code為200),但是內(nèi)容是NotFound信息。

    • 查看AM日志(syslog)啟動時打印信息,正常初始化信息如下:

       [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
    • 如果有以下異常信息,說明AM運行時yarn.timeline-service.enabled配置異常,可能原因為FlowAgent問題(FlowAgent里對Hive作業(yè)有2種實現(xiàn),一種是Hive命令,另外一種是Beeline命令,此時默認配置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頁面有一個正在運行的Spark Thrift JDBC/ODBC Server任務(wù)?

如果您在創(chuàng)建集群時選擇了Spark服務(wù),集群會自動啟動一個默認的Spark Thrift Server服務(wù)。該服務(wù)會占用一個YARN Driver的資源。在Spark Thrift Server中運行的任務(wù),默認會通過該Driver向YARN申請所需的資源。

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的默認值與hadoop.tmp.dir參數(shù)相同。請不要修改HDFS的hadoop.tmp.dir參數(shù),因為這會影響yarn.timeline-service.leveldb-timeline-store.path的配置。

Timeline Server連接超時、CPU或Memory占用異常高問題,該如何處理?

在Tez任務(wù)特別多的情況下,寫入YARN的Timeline Server時,可能會出現(xiàn)連接超時的問題。這是因為Timeline Server進程占用大量CPU導致節(jié)點CPU使用率達到極限,進而影響到了作業(yè)開發(fā)和其他非核心業(yè)務(wù)(例如報表生成),所以臨時停止TimelineServer進程來減輕節(jié)點的CPU負載。您可以通過修改以下配置項來解決此問題。

在EMR控制臺修改Tez和YARN服務(wù)的相應(yīng)配置,新增或修改配置的具體操作,請參見管理配置項

  1. 在EMR控制臺Tez服務(wù)的配置頁面的tez-site.xml頁簽,新增參數(shù)為tez.yarn.ats.event.flush.timeout.millis,參數(shù)值為60000的配置項,該參數(shù)用來設(shè)置Tez任務(wù)將事件寫入YARN的Timeline Server時的超時時間。

  2. 在EMR控制臺YARN服務(wù)的配置頁面的yarn-site.xml頁簽,新增或修改以下配置項。修改完配置項后需要在YARN服務(wù)的狀態(tài)頁面重啟下TimelineServer。

    參數(shù)

    參數(shù)值

    說明

    yarn.timeline-service.store-class

    org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore

    用于指定YARN Timeline Server的事件存儲類。

    yarn.timeline-service.rolling-period

    daily

    用于設(shè)置YARN Timeline Server的事件滾動周期

    yarn.timeline-service.leveldb-timeline-store.read-cache-size

    4194304

    用于設(shè)置YARN Timeline Server LevelDB存儲的讀取緩存大小。

    yarn.timeline-service.leveldb-timeline-store.write-buffer-size

    4194304

    用于設(shè)置YARN Timeline Server LevelDB存儲的寫入緩沖區(qū)大小。

    yarn.timeline-service.leveldb-timeline-store.max-open-files

    500

    用于設(shè)置YARN Timeline Server LevelDB存儲的最大打開文件數(shù)。