天天看点

ERROR YarnClientSchedulerBackend:Yarn application has already ended! It might have been killed

文章目录

  • ​​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      
ERROR YarnClientSchedulerBackend:Yarn application has already ended! It might have been killed

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>      

继续阅读