自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【大數(shù)據(jù)】yarn 任務(wù)中的幾種狀態(tài)變化詳細過程

大數(shù)據(jù) 數(shù)據(jù)分析
YARN Proxy可以讓您通過Web界面對集群進行監(jiān)視和管理,而不必直接連接到每個節(jié)點。YARN Proxy服務(wù)是一個Web代理服務(wù)器,運行在YARN集群之外,并提供對集群資源管理器和節(jié)點管理器的訪問。

一、概述

在YARN中,應(yīng)用程序和Container的狀態(tài)變化會影響任務(wù)的執(zhí)行和資源分配。下面是YARN中應(yīng)用程序和Container的狀態(tài)詳細過程:

1)Application 狀態(tài)

是指YARN應(yīng)用程序的狀態(tài)。每個應(yīng)用程序都有一個唯一的Application ID,并且可以通過ResourceManager API或YARN Web UI來獲取應(yīng)用程序的當(dāng)前狀態(tài)。在YARN中,應(yīng)用程序狀態(tài)可以有以下狀態(tài):

  1. NEW:應(yīng)用程序剛創(chuàng)建時的狀態(tài)。應(yīng)用程序會被分配一個唯一的Application ID,但還沒有分配資源,也沒有進入資源隊列。
  2. NEW_SAVING:應(yīng)用程序等待資源保存。這個狀態(tài)只存在于開啟了Application歷史保存的集群上,如果沒有保存歷史,則該狀態(tài)的轉(zhuǎn)換不會發(fā)生。
  3. SUBMITTED:應(yīng)用程序已經(jīng)提交給YARN,并在隊列中等待調(diào)度資源。在該狀態(tài)下,YARN只是對應(yīng)用程序進行了初步的運行時配置,但還沒有將任何容器分配到該應(yīng)用程序。
  4. ACCEPTED:應(yīng)用程序已經(jīng)通過隊列,并已經(jīng)分配了它需要的初始和最小容器。
  5. RUNNING:應(yīng)用程序正在運行中,并具有正在運行的容器。
  6. FINISHED:應(yīng)用程序已經(jīng)成功完成,并且其最終狀態(tài)已經(jīng)保存到Y(jié)ARN應(yīng)用歷史中。
  7. FAILED:應(yīng)用程序運行失敗,并且其最終狀態(tài)已經(jīng)保存到Y(jié)ARN應(yīng)用歷史中。
  8. KILLED:應(yīng)用程序已被終止,并且其最終狀態(tài)已經(jīng)保存到Y(jié)ARN應(yīng)用歷史中。

2)Container 狀態(tài)

容器狀態(tài)指的是在YARN集群上運行的應(yīng)用程序內(nèi)部的容器狀態(tài)。在YARN集群上運行的應(yīng)用程序是通過啟動多個容器來實現(xiàn)的,每個容器都運行著應(yīng)用程序的一部分(如MapReduce中的一個map或reduce任務(wù)),并使用一個或多個資源(如內(nèi)存、CPU等)來執(zhí)行任務(wù)。當(dāng)一個應(yīng)用程序啟動后,它的容器狀態(tài)可能有以下幾種:

  1. NEW:Container剛剛創(chuàng)建,但還沒有分配資源。
  2. LOCALIZED:Container已經(jīng)獲取了運行時環(huán)境和所需的資源,表示資源已經(jīng)被分配給某個容器,但資源還未完全在該容器上本地化。在容器執(zhí)行應(yīng)用程序之前,需要將應(yīng)用程序所需的資源(如JAR包、配置文件等)拷貝到容器所在的節(jié)點上,并在容器內(nèi)部完成相關(guān)配置。完成本地化操作后,容器就可以開始執(zhí)行應(yīng)用程序。
  3. RUNNING:Container正在運行,并且已經(jīng)分配了資源。
  4. COMPLETE:Container已經(jīng)完成工作并退出。
  5. EXITED_WITH_SUCCESS:表示容器成功執(zhí)行完畢,并且已經(jīng)被清理。
  6. EXITED_WITH_FAILURE:表示容器執(zhí)行失敗,并且已經(jīng)被清理。

從 NEW 狀態(tài)到 LOCALIZED 狀態(tài),Container 會向 NodeManager 發(fā)起本地化請求,要求 NodeManager 將所需的資源復(fù)制到本地磁盤。從 LOCALIZED 狀態(tài)到 RUNNING 狀態(tài),Container會通過啟動進程來運行任務(wù)。在運行過程中,Container 可能會由于各種原因失敗,進入 FAILED 狀態(tài)。如果Container 順利完成任務(wù),則進入 COMPLETE 狀態(tài)。

綜上所述,YARN中應(yīng)用程序和Container的狀態(tài)變化對于任務(wù)的執(zhí)行和資源分配非常關(guān)鍵。在使用YARN進行任務(wù)調(diào)度和管理時,需要對不同狀態(tài)之間的轉(zhuǎn)換有清晰的理解,以確保任務(wù)能夠順利運行和完成。

二、資源不足情況下狀態(tài)變化

1)資源不足情況下

在YARN中,當(dāng)資源不足時,YARN的資源管理器會對應(yīng)用程序的狀態(tài)進行調(diào)整,以幫助其適應(yīng)現(xiàn)有的資源情況。下面是YARN中應(yīng)用程序狀態(tài)在資源不足的情況下的狀態(tài)變化:

  • 如果應(yīng)用程序在 SUBMITTED 狀態(tài)時,發(fā)現(xiàn)資源不足,那么應(yīng)用程序會進入 ACCEPTED狀態(tài)。在這種情況下,YARN會嘗試為應(yīng)用程序分配資源,但可能需要等待其他應(yīng)用程序釋放資源后才能成功分配。
  • 如果應(yīng)用程序在 ACCEPTED 狀態(tài)時,發(fā)現(xiàn)資源不足,那么應(yīng)用程序會進入等待狀態(tài)。在等待狀態(tài)下,應(yīng)用程序不會分配任何容器,因為資源不足無法分配。
  • 如果應(yīng)用程序在等待狀態(tài)中,嘗試重新分配資源,但仍然可以找到空閑資源。在這種情況下,應(yīng)用程序會返回 ACCEPTED 狀態(tài),并成功分配新的容器。
  • 如果應(yīng)用程序在等待狀態(tài)中,無法重新分配資源,那么應(yīng)用程序會轉(zhuǎn)移到 KILLED 或 FAILED 狀態(tài)。在這種情況下,應(yīng)用程序無法分配所需的資源,因此無法完成任務(wù)。

2)任務(wù)超時時間配置

任務(wù)等待超時時間:

  • 在YARN中,任務(wù)等待資源的超時時間可以由任務(wù)提交者指定(優(yōu)先級高),并且也可以在應(yīng)用程序的配置文件(例如mapred-site.xml或yarn-site.xml)中進行設(shè)置。超時時間指定的是任務(wù)等待資源的最長時間,如果在此期間內(nèi)無法獲得所需的資源,則任務(wù)將被標(biāo)記為失敗。
  • 在默認情況下,任務(wù)等待資源的超時時間是YARN調(diào)度器指定的一個全局值,可以在yarn-site.xml配置文件中進行設(shè)置。該全局值的默認值是600000毫秒(10分鐘)。但也可以針對某個具體任務(wù)的特定需求進行調(diào)整,方法是在提交任務(wù)時構(gòu)造一個ResourceRequest對象,并指定該對象的超時時間。

在YARN中,可以通過配置文件設(shè)置任務(wù)等待資源的超時時間,其中包括 mapred-site.xml 和 yarn-site.xml 兩個文件。

1、yarn-site.xml 文件中配置超時時間

在 yarn-site.xml 文件中,可以設(shè)置以下兩個參數(shù)來控制任務(wù)等待資源的超時時間:

  • yarn.nodemanager.resource.timeout-ms:這個參數(shù)定義了節(jié)點管理器等待應(yīng)用程序可能需要的資源的最長時間。如果等待時間超過此限制,則節(jié)點管理器會殺死該應(yīng)用程序。默認值為10分鐘(600000毫秒)。
  • yarn.resourcemanager.resource-tracker.client.thread-count:這個參數(shù)定義了資源管理器向節(jié)點管理器發(fā)送請求的線程數(shù)。通過增加這個參數(shù),可以提高資源管理器向節(jié)點管理器發(fā)送請求的并發(fā)性能,從而減少任務(wù)等待的時間。

2、mapred-site.xml 文件中配置超時時間

在 mapred-site.xml 文件中,可以設(shè)置以下參數(shù)來控制 MapReduce 作業(yè)等待資源的超時時間:

  • mapreduce.client.completion.pollinterval:這個參數(shù)定義了客戶端輪詢作業(yè)的完成狀態(tài)的時間間隔。默認值為5000毫秒。
  • mapreduce.client.progressmonitor.pollinterval:這個參數(shù)定義了客戶端輪詢作業(yè)的進度狀態(tài)的時間間隔。默認值為1000毫秒。

在這兩個文件中,都可以使用默認值,也可以根據(jù)實際需求進行調(diào)整。當(dāng)然也可以在程序中設(shè)定超時時間,示例代碼如下:

ResourceRequest resReq = Records.newRecord(ResourceRequest.class);
resReq.setResourceName(capability.getResourceName());
resReq.setCapability(capability);
resReq.setNumContainers(numContainers);
resReq.setRelaxLocality(relaxLocality);
resReq.setPriority(priority);
//設(shè)置最長等待時間為30分鐘,即1800000毫秒
resReq.setTimeout(1800000);
appAttemptID.setAttemptId(appAttemptNumber);
amClient.addContainerRequest(resReq);

綜上所述,在應(yīng)用程序和資源的狀態(tài)變化中,資源不足是一個常見的問題。在處理這種情況時,YARN會對應(yīng)用程序的狀態(tài)進行調(diào)整,以盡可能適應(yīng)現(xiàn)有的資源情況。在使用YARN進行任務(wù)調(diào)度和管理時,需要注意資源分配情況,并根據(jù)實際情況進行調(diào)整,以確保任務(wù)能夠順利運行和完成。

三、環(huán)境準(zhǔn)備

如果已經(jīng)有了環(huán)境了,可以忽略,如果想快速部署環(huán)境進行測試可以參考我這篇文章:通過 docker-compose 快速部署 Hive 詳細教程

# 登錄容器
docker exec -it hive-hiveserver2 bash
# 連接hive
beeline -u jdbc:hive2://hive-hiveserver2:10000  -n hadoop

四、Yarn 工作流程

YARN主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等組件構(gòu)成。

當(dāng)用戶給Yarn提交了一個應(yīng)用程序后,Yarn的主要工作流程如下圖:

  • 【步驟1】用戶向Yarn提交應(yīng)用程序,其中包括用戶程序、相關(guān)文件、啟動 ApplicationMaster 命令、 ApplicationMaster程序等。
  • 【步驟2】ResourceManager為該應(yīng)用程序分配第一個Container,并且與Container所在的NodeManager通信,并且要求該NodeManager在這個Container中啟動應(yīng)用程序?qū)?yīng)的ApplicationMaster。
  • 【步驟3】ApplicationMaster 首先會向 ResourceManager 注冊,這樣用戶才可以直接通過 ResourceManager 查看到應(yīng)用程序的運行狀態(tài),然后它為準(zhǔn)備為該應(yīng)用程序的各個任務(wù)申請資源,并監(jiān)控它們的運行狀態(tài)直到運行結(jié)束,即重復(fù)后面4~7步驟。
  • 【步驟4】ApplicationMaster 采用輪詢的方式通過 RPC 協(xié)議向 ResourceManager 申請和領(lǐng)取資源。
  • 【步驟5】一旦 ApplicationMaster 申請到資源后,便會與申請到的 Container 所對應(yīng)的 NodeManager 進行通信,并且要求它在該Container中啟動任務(wù)。
  • 【步驟6】任務(wù)啟動。NodeManager 為要啟動的任務(wù)配置好運行環(huán)境,包括環(huán)境變量、JAR包、二進制程序等,并且將啟動命令寫在一個腳本里,通過該腳本運行任務(wù)。
  • 【步驟7】各個任務(wù)通過 RPC 協(xié)議向其對應(yīng)的 ApplicationMaster 匯報自己的運行狀態(tài)和進度,以讓ApplicationMaster隨時掌握各個任務(wù)的運行狀態(tài),從而可以再任務(wù)運行失敗時重啟任務(wù)。
  • 【步驟8】應(yīng)用程序運行完畢后,其對應(yīng)的ApplicationMaster會向ResourceManager通信,要求注銷和關(guān)閉自己。

這個需要注意的是在整個工作流程當(dāng)中,ResourceManager 和 NodeManager 都是通過心跳保持聯(lián)系的,NodeManager 會通過心跳信息向 ResourceManager 匯報自己所在節(jié)點的資源使用情況。

五、Yarn 常用命令

下面是YARN常用命令的一些示例:

1)查看應(yīng)用程序

# 查看在運行的任務(wù)
yarn application -list

# 查看所有任務(wù)
yarn application -list -appStates ALL
# 狀態(tài)值:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED

該命令用于顯示當(dāng)前正在運行中的所有應(yīng)用程序的列表,包括應(yīng)用程序ID、名稱、用戶、隊列、開始時間、結(jié)束時間、狀態(tài)等信息。

  • 查看YARN應(yīng)用程序的狀態(tài):
yarn application -status <Application ID>

# 示例:
yarn application -status application_1683209715059_0002

該命令用于查看指定 Application ID 的應(yīng)用程序的狀態(tài)??梢圆榭磻?yīng)用程序的名稱、用戶、隊列、開始時間、結(jié)束時間、狀態(tài)、進度等信息。

3)查看指定應(yīng)用程序的日志

yarn logs -applicationId <Application ID>

#示例:
yarn logs -applicationId application_1683209715059_0002

該命令用于查看指定應(yīng)用程序的日志。可以使用該命令查看應(yīng)用程序在運行過程中輸出到 STDOUT 和STDERR 的所有日志信息。

4)查看NodeManager ID

使用以下命令查看YARN集群中所有NodeManager的狀態(tài):

yarn node -list

該命令將顯示所有NodeManager節(jié)點的狀態(tài),包括主機名,HTTP地址,狀態(tài),容器數(shù)量等信息。

5)查看指定NodeManager的日志

# 查看<Application ID>
yarn application -list -appStates ALL

# 查看<NodeManager ID>
yarn node -list

# 再查看日志
yarn logs -applicationId <Application ID> -nodeId <NodeManager ID>

# 示例:
yarn logs -applicationId application_1683209715059_0002 hadoop-yarn-nm-0:40140

該命令用于查看指定NodeManager上指定應(yīng)用程序的日志??梢允褂迷撁畈榭垂?jié)點管理器(NodeManager)在運行過程中輸出到 STDOUT 和 STDERR 的所有日志信息。

6)殺死指定應(yīng)用程序

# 查看在運行的任務(wù)
yarn application -list

# kill 任務(wù)
yarn application -kill <Application ID>

# 示例:
yarn application -kill application_1683209715059_0002

該命令用于殺死指定 Application ID 的應(yīng)用程序。如果應(yīng)用程序正在運行,則它將被強制終止并結(jié)束。

7)服務(wù)啟停命令

1、啟停YARN服務(wù)

# 包括RM,NM,啟動
start-yarn.sh

# 停止
stop-yarn.sh

2、啟停YARN resourcemanager、NM服務(wù)

# 啟動 resourcemanager
yarn --daemon start resourcemanager
# 停止 resourcemanager
yarn --daemon stop  resourcemanager

# 啟動 nodemanager
yarn --daemon start  nodemanager
# 停止 nodemanager
yarn --daemon stop  nodemanager

# 指定日志級別,有 DEBUG、INFO、WARN、ERROR等級別。
#示例:
yarn --loglevel DEBUG --daemon start resourcemanager

8)啟停YARN proxyserver 服務(wù)

YARN Proxy可以讓您通過Web界面對集群進行監(jiān)視和管理,而不必直接連接到每個節(jié)點。YARN Proxy服務(wù)是一個Web代理服務(wù)器,運行在YARN集群之外,并提供對集群資源管理器和節(jié)點管理器的訪問。您可以通過代理訪問Web界面,查看群集使用情況和任務(wù)執(zhí)行狀況。

yarn --daemon start proxyserver

這里就不展開講解YARN proxyserver 服務(wù),后面有單獨講解。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2014-04-16 11:01:07

SparkYarn

2014-01-06 11:26:38

ApacheMesos

2014-01-06 17:41:44

ApacheMesos

2019-12-12 15:39:28

大數(shù)據(jù)IT互聯(lián)網(wǎng)

2018-04-11 06:31:24

大數(shù)據(jù)架構(gòu)數(shù)據(jù)分析Hadoop

2019-08-23 15:55:27

架構(gòu)大數(shù)據(jù)BI系統(tǒng)

2023-07-27 07:03:24

MySQL存儲SQL

2015-01-06 09:11:54

TCP

2012-05-09 09:27:54

大數(shù)據(jù)PaaSMapReduce

2020-01-09 10:47:15

HDFS數(shù)據(jù)文件

2018-10-24 14:32:15

數(shù)據(jù)分析數(shù)據(jù)科學(xué)算法

2012-02-15 14:49:27

云計算大數(shù)據(jù)

2017-01-04 10:12:15

大數(shù)據(jù)農(nóng)業(yè)氣候

2016-12-23 21:15:03

大數(shù)據(jù)思維模式變化

2023-05-09 07:46:32

2021-02-22 10:55:59

大數(shù)據(jù)大數(shù)據(jù)平臺數(shù)據(jù)平臺建設(shè)

2018-12-07 14:50:35

大數(shù)據(jù)數(shù)據(jù)采集數(shù)據(jù)庫

2020-12-17 19:15:48

大數(shù)據(jù)大數(shù)據(jù)平臺架構(gòu)數(shù)據(jù)平臺建設(shè)

2023-10-26 07:15:46

點贊
收藏

51CTO技術(shù)棧公眾號