文章目录
- 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>