Hive执行复杂查询突然卡住不动解决办法

有时使用hive进行一般的查询操作时,执行的很快,但是一遇到多表复杂查询就会出一个问题,会发现程序一直卡着不动了,也不报错,开始以为是mapreduce计算的慢,所以程序执行有点卡断,可是过了好一会还是卡着不动,这就有点无语了,最后没办法只有强制kill.
在这里插入图片描述
查看日志没有报错.
查看mr状态发现一直在ACCEPTED状态.说明mr有问题,执行mr job ,果然卡死.

查询得知是因为yarn的物理内存过少,建议配置为自己的电脑运行内存大小或二倍运行内存大小.
这时时候就要到hadoop的安装目录下的/etc/hadoop去找配置文件yarn-site.xml添加配置信息,把yarn的物理内存加大。

cd /opt/soft/hadoop260/etc/hadoop
vi yarn-site.xml

<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>20480</value>
</property>

这个参数是设置集群中某个计算节点分配给nodemanager的最大可用内存,这个最大可用内存不是该节点最大内存,而是该节点最大内存划分出来的给nodemanager使用的内存。把这个参数增大到20G,hive查询就可以顺利执行了。

其它配置参数解析:

yarn.scheduler.minimum-allocation-mb

1.单个容器可申请的最小内存资源

  • 这个配置时用来指定单个容器(container)可申请的最小内存资源
  • 如果申请的内存资源小于这个配置项的值,则按最小值分配
  • 这个配置是会影响到单个节点上container个数的,所以比较重要

推荐设置内存大小:
在这里插入图片描述

2.单个容器可申请的最大内存资源

yarn.scheduler.maximum-allocation-mb
  • 单个容器(container)可申请的最大内存资源,应用在运行时申请的内存不能超过这个配置项值
  • 因为这个配置项是指定一个container最大的内存,实际分配内存时并不是按照这个配置项分配,所以这个配置项可以配置成和nodemanager的可用内存(yarn.nodemanager.resource.memory-mb)一样即可,这样的话,意味着只要这个节点的nodemanager可用内存哪怕只够跑一个container,这个container也是可以启动的
  • 如果这个参数配置的比nodemanager的可用内存(yarn.nodemanager.resource.memory-mb)小,那么可能出现这个节点总内存即使足够提供所需内存的,但却无法启动container的情况

如果hive重新提交查询的时候,还是卡着不动假死,也不报错。 查看log也没有问题,怀疑是Hive没有连接上mapreduce,导致job没有执行,这个时候我们到Hivede conf配置文件下找到hive-env.sh,添加配置信息
步骤:
首先要把hive-env.sh.template这个文件拷贝一份并改名字成hive-env.sh

cd /opt/soft/hive110/conf
cp hive-env.sh.template hive-env.sh

vi hive-env.sh

HADOOP_HOME=/opt/soft/hadoop260
export HIVE_CONF_DIR=/opt/soft/hive110/conf

这样就可以了。

有时是因为启动hadoop的时候,有resourcemanager,nodemanager其中一个没有启动造成的,所以启动hadoop的时候查看进程,看是不是5个进程都启动成功了,使用jps就能查看到。如果没有5个进程,就关闭hadoop重新启动。

如果是运行hadoop高可用集群的话,zookeeper集群和yarn资源管理器一定要都开启,不然即使配置了hive,那么hive调用MapReduce的时候也是得不到回应。解决办法:开始yarn资源管理器。

猜你喜欢

转载自blog.csdn.net/zp17834994071/article/details/108368056