YARN線上動態資源調優

語言: CN / TW / HK

背景

線上Hadoop叢集資源嚴重不足,可能存在新增磁碟,新增CPU,新增節點的操作,那麼在新增這些硬體資源之後,我們的叢集是不能立馬就利用上這些資源的,需要修改叢集Yarn資源配置,然後使其生效。

現有環境

伺服器:12臺,記憶體64Gx12=768G,物理cpu16x12=192,磁碟12Tx12=144T

元件:Hadoop-2.7.7,Hive-2.3.4,Presto-220,Dolphinscheduler-1.3.6,Sqoop-1.4.7

分配策略

由於我們的版本是Hadoop-2.7.7,有些預設配置是固定一個值,好比可用記憶體8G,可用CPU核數8核,如果調優就需要我們配置的東西比較多。

官方Yarn引數配置:https://hadoop.apache.org/docs/r2.7.7/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

未來的版本(Hadoop-3.0+)其實是有自動檢測硬體資源的機制,需要開啟配置:yarn.nodemanager.resource.detect-hardware-capabilities,然後會自動計算資源配置,不過這個是預設關閉的,每個節點的NodeManager可用記憶體配置 yarn.nodemanager.resource.memory-mb 和CPU核數 yarn.nodemanager.resource.cpu-vcores 也是受此配置影響, 預設配置都是-1,則可用記憶體為8G,CPU核數為8核。如果開啟了自動監測硬體資源,其他配置則可以忽略不用配置,簡化了配置。

官方Yarn引數配置:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

還有一個重要的配置 yarn.nodemanager.vmem-pmem-ratio ,表示NodeManager上的Container實體記憶體不足時,可用使用虛擬記憶體,預設為實體記憶體的2.1倍。

修改配置

yarn-site.xml

修改yarn-site.xml,有則修改,沒有則新增,這裡我們設定單個節點可用記憶體30G,可用CPU核數為16

<property>    <name>yarn.nodemanager.resource.memory-mb</name>    <value>30720</value>    <discription>每個節點可用記憶體,預設8192M(8G),這裡設定30G</discription> </property> <property>    <name>yarn.scheduler.minimum-allocation-mb</name>    <value>1024</value>    <discription>單個任務可申請最少記憶體,預設1024MB</discription> </property> <property>    <name>yarn.scheduler.maximum-allocation-mb</name>    <value>20480</value>    <discription>單個任務可申請最大記憶體,預設8192M(8G),這裡設定20G</discription> </property> <property>    <name>yarn.app.mapreduce.am.resource.mb</name>    <value>2048</value>    <discription>預設為1536。MR運行於YARN上時,為AM分配多少記憶體。預設值通常來說過小,建議設定為2048或4096等較大的值。</discription> </property> <property>    <name>yarn.nodemanager.resource.cpu-vcores</name>    <value>16</value>    <discription>預設為8。每個節點可分配多少虛擬核給YARN使用,通常設為該節點定義的總虛擬核數即可。</discription> </property> <property>    <name>yarn.scheduler.maximum-allocation-vcores</name>    <value>32</value>    <discription>分別為1/32,指定RM可以為每個container分配的最小/最大虛擬核數,低 於或高於該限制的核申請,會按最小或最大核數來進行分配。預設值適合 一般叢集使用。</discription> </property> <property>    <name>yarn.scheduler.minimum-allocation-vcores</name>    <value>1</value>    <discription>分別為1/32,指定RM可以為每個container分配的最小/最大虛擬核數,低 於或高於該限制的核申請,會按最小或最大核數來進行分配。預設值適合 一般集>群使用。</discription> </property> <property>  <name>yarn.nodemanager.vcores-pcores-ratio</name>  <value>2</value>  <discription>每使用一個物理cpu,可以使用的虛擬cpu的比例,預設為2</discription> </property> ​ <property>  <name>yarn.nodemanager.vmem-pmem-ratio</name>  <value>5.2</value>  <discription>實體記憶體不足時,使用的虛擬記憶體,預設是2.1,表示每使用1MB的實體記憶體,最多可以使用2.1MB的虛擬記憶體總量。</discription> </property>

mapred-site.xml

修改mapred-site.xml,有則修改,沒有則新增

給單個任務設定記憶體資源,注意這裡的值不能大於上面對應的記憶體 yarn.scheduler.maximum-allocation-mb

<property>    <name>mapreduce.map.memory.mb</name>    <value>2048</value>    <discription>預設均為1024,排程器為每個map/reduce task申請的記憶體數。各Job也可以單獨指定。</discription> </property> <property>    <name>mapreduce.reduce.memory.mb</name>    <value>2048</value>    <discription>預設均為1024,排程器為每個map/reduce task申請的記憶體數。各Job也可以單獨指定。</discription> </property>

叢集生效

分發

修改完配置後,一定要將配置分發到其他叢集節點,使用 scp 或者 xsync 工具分發到其他節點,這裡舉例分發到一個節點

cd /data/soft/hadoop/hadoop-2.7.7/etc/hadoop

scp -r yarn-site.xml mapred-site.xml data002:`pwd`

動態重啟

為了不影響叢集使用,我們單獨啟停Yarn,Yarn的服務主要有兩個NodeManager和ResourceManager,單獨啟停命令

yarn-daemon.sh stop nodemanager yarn-daemon.sh start nademanager

yarn-daemon.sh stop resourcemanager yarn-daemon.sh start resourcemanager

根據叢集節點逐個執行以上命令,ResourceManager對應的節點執行對應的命令。這樣我們就保證了叢集資源的動態調優。

當然,如果單個重啟麻煩,也可以執行Yarn的重啟命令

stop-yarn.sh start-yarn.sh

ResourceManager對應的從節點單獨啟停即可。

更多請在公號平臺搜尋:選手一號位,本文編號:2004,回覆即可獲取。