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,回覆即可獲取。