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參數配置://hadoop.apache.org/docs/r2.7.7/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
yarn.nodemanager.resource.detect-hardware-capabilities
,然後會自動計算資源配置,不過這個是默認關閉的,每個節點的NodeManager可用記憶體配置 yarn.nodemanager.resource.memory-mb
和CPU核數 yarn.nodemanager.resource.cpu-vcores
也是受此配置影響, 默認配置都是-1,則可用記憶體為8G,CPU核數為8核。如果開啟了自動監測硬體資源,其他配置則可以忽略不用配置,簡化了配置。
官方Yarn參數配置://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對應的從節點單獨啟停即可。