文章目錄
- 1 錯誤重制
- 2 原因
- 3 解決方法
1 錯誤重制
在使用Hudi Admin CLI進行compaction的MOR資料集時,報錯如下:
ERROR YarnClientSchedulerBackend: YARN application has exited unexpectedly with state FAILED! Check the YARN application logs for more details.
is running beyond virtual memory limits. Current usage: 342.7 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1627008673186_0079_02_000001
2 原因
yarn模式下的spark運作的任務的記憶體容量不夠,導緻容器被kill。
3 解決方法
更改
hadoop-2.10.1/etc/hadoop/yarn-site.xml
的配置,修改内容如下:
<configuration>
<property>
<!--配置 NodeManager 上運作的附屬服務。需要配置成 mapreduce_shuffle 後才可以在 Yarn 上運作 MapReduce 程式。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--resourcemanager 的主機名-->
<name>yarn.resourcemanager.hostname</name>
<value>hdp-jk-1</value>
</property>
<property>
<!--nodemanager最大可用記憶體-->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
</property>
<property>
<!--單個Container最大可用記憶體-->
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>10240</value>
</property>
<property>
<!--單個Container最小可用記憶體-->
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<!--單個Container最小可用核心-->
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<!--單個Container最大可用核心數-->
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>24</value>
</property>
<property>
<!--實體記憶體和虛拟記憶體比率-->
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>3</value>
</property>
</configuration>
裡面最有用的就是下面這句(任務每使用1MB實體記憶體,最多可使用虛拟記憶體量,預設是2.1,預設比例2.1):
<property>
<!--實體記憶體和虛拟記憶體比率-->
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>3</value>
</property>
類似的方法還有下面的:
- 作用為:是否檢查每個任務正使用的實體記憶體量,如果超過預設值則将其殺死,預設是true()。
- 不太推薦yarn.nodemanager.pmem-check-enabled設定為false,因為往往會使用虛拟記憶體導緻任務變慢。你可以單純的增大map和reduce的記憶體,這樣就會間接增大虛拟記憶體,因為他們之際有比例關系2.1。
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<configuration>
<property>
<!--指定 mapreduce 作業運作在 yarn 上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>56624</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx5024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>56624</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx5560M</value>
</property>
</configuration>