问题排查Hive本地计算模式失败

问题排查Hive本地计算模式失败

查看hive.log后发现是java space heap,也就是java内存溢出。

解决方案:

  1. 配置yarn集群的资源分配。
  • 由于是本地计算,因此container一定是申请在本地的,限制AM申请container容器资源的大小很重要。机器节点的资源可用通过配置NodeManager,所以第一步是配该节点的NodeManager资源。

    我的服务器是8G2核的,大家可以参考一下。

    我的配置如下:

    <!-- 不设置nm虚拟cpu核数,使用默认值-1,即8核,注:这里的8核指的是虚拟cpu核数,为了屏蔽物理机器差异,nodemanager所定义的核数指的是虚拟cpu,所以我物理2核也没关系-->
    
    <!-- 设置nm分配的物理内存,此值得大于container的最小内存 -->
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2048</value>
    </property>
    

    NodeManager配置完后,需要配置Container,即申请容器的大小。一个job会被ApplicationMaster分成多个task,task再分为task_attampt。而AM和task_attampt都是运行在Container中的,每个Container可申请的资源数可以通过配置约束。

    	<!-- 分配给container的最小内存 -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>256</value>
    </property>
    	<!-- 分配给container的最大内存 -->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>512</value>
    </property>
        <!-- 分配给container的最小虚拟cpu核数,使用默认值1 -->
    
        <!-- 分配给container的最大虚拟cpu核数 -->
    <property>
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>1</value>
    </property>
    
  1. 调整java堆大小

    有两处需要设置

  • 在hive-site.xml中写入

    <!--This would set your java heap space to 2048 MB (2GB), you may even try it with a lower value first if that works -->
    <property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx2048m</value>
    </property>
    
  • 在hive-env.sh中写入

    export HADOOP_HEAPSIZE=2048
    

建议:

如果本地跑的任务会被分片很多,建议设置

<property>
   <name>hive.exec.mode.local.auto.input.files.max</name>
   <value>10</value>
</property>

参考资料:

  1. https://stackoverflow.com/questions/15609909/error-java-heap-space
  2. https://developer.aliyun.com/article/1258023
posted @ 2023-08-13 20:25  nangk  阅读(57)  评论(0编辑  收藏  举报