YARN線上動態資源調優
背景
線上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引數配置:http://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引數配置:http://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,回覆即可獲取。