天天看點

CDH6.3.2之YARN生産環境調優(yarn 生産必做優化項)

調整YARN

本主題僅适用于YARN群集,并介紹如何為群集調整和優化YARN。

注意:下載下傳Cloudera YARN調整電子表格以幫助計算YARN配置。 有關簡短視訊概述,請參閱調整YARN應用程式。

概觀

此概述提供YARN群集的抽象描述和YARN調整的目标。

YARN群集由主機組成。 主機提供記憶體和CPU資源。 vcore或虛拟核心是主機CPU的使用份額。

調整YARN主要包括在工作主機上最佳地定義容器。 您可以将容器視為由記憶體和vcores組成的矩形圖。 容器執行任務。

有些任務使用大量記憶體,對大量資料的處理最少。

其他任務需要大量處理能力,但使用的記憶體較少。例如,蒙特卡羅模拟評估許多可能的“如果?”場景在相對較小的資料集上使用大量處理能力。

YARN ResourceManager配置設定記憶體和vcores以盡可能以最有效的方式使用所有可用資源。理想情況下,很少或沒有資源閑置。

應用程式是由一個或多個任務組成的YARN用戶端程式。通常,任務使用容器中的所有可用資源。任務不能超過其指定的配置設定,確定它不能使用所有主機CPU周期或超過其記憶體配置設定。

通過将容器配置為使用除開銷和其他服務所需的所有可用資源之外,調整YARN主機以優化vcores和記憶體的使用。

YARN調整有三個階段。這些階段對應于YARN調整電子表格中的頁籤。

1、群集配置,您可以在其中配置主機。
2、YARN配置,您可以量化記憶體和vcores。
3、MapReduce配置,您可以為特定map和reduce任務配置設定最小和最大資源。
      

YARN和MapReduce具有許多可配置的屬性。有關完整清單,請參閱Cloudera Manager配置屬性。 YARN調整電子表格列出了這些屬性的基本子集,這些屬性最有可能提高常見MapReduce應用程式的性能。

群集配置

在Cluster Configuration頁籤中,您可以為YARN實作定義工作主機配置和群集大小。

機器配置

第1步:工作者主機配置 //表格中寫單個主機配置

在下面的輸入框中輸入您可能的機器配置。 如果您不确定您計劃購買哪種機器,請提供一些适合您預期購買的最小值。

與任何系統一樣,可用的記憶體和CPU資源越多,叢集處理大量資料的速度就越快。 具有4個帶超線程的CPU的機器,每個CPU有6個核心,每個主機提供48個vcore。

2個單元伺服器安裝中的3 TB硬碟驅動器在JBOD(Just a Bunch Of Disks)配置中有12個可用插槽,這是在建立電子表格時性能和價格之間的合理平衡。 存儲成本會随着時間的推移而降低,是以您可能會考慮使用4 TB磁盤。 較大的磁盤價格昂貴,并非所有用例都需要。

兩個1千兆位以太網端口在電子表格釋出時提供了足夠的吞吐量,但10千兆位以太網端口是價格低于速度的選擇。

第2步:勞工主持人計劃

現在您已從步驟1獲得基本主機配置,請使用下表将資源(主要是CPU和記憶體)配置設定給在主機上運作的各種軟體元件。

從您的作業系統開始至少8 GB,為Cloudera Manager開始至少1 GB。 如果CDH以外的服務需要其他資源,請在“其他服務”下添加這些數字。

HDFS DataNode使用至少1個核心和大約1 GB記憶體。 相同的要求适用于YARN NodeManager。

電子表格列出了幾個可選服務:

Impala守護程式需要至少16 GB的守護程式。
 HBase Region Servers需要12-16 GB的記憶體。
 Solr伺服器至少需要1 GB的記憶體。
 Kudu平闆電腦伺服器至少需要1 GB的記憶體。
      

任何剩餘資源都可用于YARN應用程式(Spark和MapReduce)。 在此示例中,有44個CPU核心可用。 在每個實體核心上設定所需的vcores乘數,以計算總可用vcores。

第3步:群集大小

定義了群集中每個主機的規範後,輸入支援業務案例所需的工作主機數。 要了解并行計算的好處,請将主機數設定為最小值10。

YARN配置

在YARN Configuration頁籤上,驗證可用資源并設定每個容器的最小和最大限制。

第4步:在群集上配置YARN

這些是群集的第一組配置值。 您可以在YARN-> Configuration中設定這些值

步驟4和5:驗證設定

步驟4從步驟2中提取記憶體和vcore編号。

步驟5顯示群集的總記憶體和vcores。

轉到資料總管Web UI(通常是http:// :8088 /并驗證“記憶體總計”和“Vcores Total”與上面的值比對。如果您的機器沒有壞節點,那麼數字應該完全比對。

步驟6:驗證群集上的容器設定

為了讓YARN作業幹淨地運作,您需要配置容器屬性。

在步驟6中,您可以更改影響容器大小的值。

最小vcores數應為1.當需要額外的vcores時,一次添加1将導緻最有效的配置設定。 将vcore預留的最大數量設定為節點的大小。

設定記憶體的最小和最大預留。 增量應該是可以影響性能的最小量。 這裡,最小值約為1 GB,最大值約為8 GB,增量為512 MB。

步驟6A:叢集容器容量

本節将告訴您群集的容量(就容器而言)。

步驟6A允許您根據輸入的數字驗證群集中容器的最小和最大數量。

最大可能容器數,基于記憶體配置

最大可能容器數,基于vcore配置

基于每個磁盤軸2個容器的容器編号

根據記憶體配置,最小可能容器數

根據vcore配置,最小可能容器數

步驟6B:容器健全檢查

本節将針對主機在STEP 6中對容器參數進行一些基本檢查。

MapReduce配置

在MapReduce Configuration頁籤上,您可以規劃增加的特定于任務的記憶體容量。

第7步:MapReduce配置

對于CDH 5.5及更高版本,我們建議僅為map和reduce任務指定堆或容器大小。 未指定的值将根據設定mapreduce.job.heap.memory-mb.ratio計算。 此計算遵循Cloudera Manager并根據比率和容器大小計算堆大小。

步驟7A:MapReduce完整性檢查

完整性檢查MapReduce設定對容器的最小/最大屬性。

通過步驟7A,您可以一目了然地确認所有最小和最大資源配置設定都在您設定的參數範圍内。

連續排程

啟用或禁用連續排程會更改YARN連續或基于節點心跳排程的頻率。 對于較大的群集(超過75個節點)看到繁重的YARN工作負載,建議通常使用以下設定禁用連續排程:

yarn.scheduler.fair.continuous-scheduling-enabled應為false
 yarn.scheduler.fair.assignmultiple應該是真的
      

在大型群集上,連續排程可能導緻ResourceManager無響應,因為連續排程會周遊群集中的所有節點。

有關連續排程調優的更多資訊,請參閱以下知識庫文章:FairScheduler使用assignmultiple調整和連續排程

我們沒有75個節點,設定為yarn.scheduler.fair.continuous-scheduling-enabled 為true

yarn.scheduler.fair.assignmultiple = true

小結:

yarn中容器記憶體的計算方法

yarn.nodemanager.resource.memory-mb

容器虛拟 CPU 核心

yarn.nodemanager.resource.cpu-vcores

//這2個值是更具最後用到的資源剩下來 多少給yarn的

提示:如果yarn.nodemanager.resource.memory-mb=2G yarn.nodemanager.resource.cpu-vcores=2 4個節點那麼在192.168.0.142:8088/cluster 界面上就會有 “Memory Total=8G” “ VCores Total=8”

最小容器記憶體

yarn.scheduler.minimum-allocation-mb = 1G //推薦值

最小容器虛拟 CPU 核心數量

yarn.scheduler.minimum-allocation-vcores = 1 //推薦值

最大容器記憶體

yarn.scheduler.maximum-allocation-mb = < yarn.nodemanager.resource.memory-mb

最大容器虛拟 CPU 核心數量

yarn.scheduler.maximum-allocation-vcores = < yarn.nodemanager.resource.cpu-vcores //推薦值

容器記憶體增量

yarn.scheduler.increment-allocation-mb = 512M

容器虛拟 CPU 核心增量

yarn.scheduler.increment-allocation-vcores = 1 //推薦值

ApplicationMaster 虛拟 CPU 核心

yarn.app.mapreduce.am.resource.cpu-vcores = 1 //推薦值

ApplicationMaster 記憶體

yarn.app.mapreduce.am.resource.mb = 1024M

ApplicationMaster Java 選項庫

yarn.app.mapreduce.am.command-opts = -Djava.net.preferIPv4Stack=true -Xmx768m

堆與容器大小之比

mapreduce.job.heap.memory-mb.ratio = 0.8 預設

Map 任務 CPU 虛拟核心

mapreduce.map.cpu.vcores = 1

Map 任務記憶體

mapreduce.map.memory.mb = 1024

Map 任務 Java 選項庫

mapreduce.map.java.opts = 忽視 ignored

I/O 排序記憶體緩沖 (MiB)

mapreduce.task.io.sort.mb = 400

Reduce 任務 CPU 虛拟核心

mapreduce.reduce.cpu.vcores = 1

Reduce 任務記憶體

mapreduce.reduce.memory.mb = 1024M

Reduce 任務 Java 選項庫

mapreduce.reduce.java.opts 忽視

Map 任務最大堆棧 819 //是 mapreduce.map.memory.mb 0.8

Reduce 任務最大堆棧 819M //mapreduce.reduce.memory.mb 0.8

ApplicationMaster Java 最大堆棧 819.2 //這個數字是yarn.app.mapreduce.am.resource.mb * 0.8得到的

連結中,有建議的值,但是我們這是測試叢集,資源很小,生産叢集上具體見連結最後的建議值