hive进行聚合查询的时候卡在kill command,不能往下进行。如下图:
当执行select*from students;语句是可以运行出结果,但是只要附加条件进行查询就会卡死在这个地方,返回不出结果。
解决方案:
一、
1、select*from students 没有问题,但一旦执行select count() from students where gender=‘女’ 后就不继续执行,原因是 select * from table 是直接在hive数据库中直接执行的,select count() from students where gender=‘女’ 确实调用了mapreduce来执行。
2、那么调用了mapreduce 之后为什么就停留在那里了呢,直接执行了官网的mapreduce的wordcount后发现相同的情况。
3、 经过上述排查,那么肯定是hadoop配置不对了,由于mapreduce的都是在datanode上执行的,所以初步认定为namenode和datanode之间没有联通。
4、于是检查 namenode的hosts文件和slave文件,修改为对应的主机名及ip之后,重新运行wordcount,成功。
5、 重新运行select count() from students where gender=‘女’ 后,成功。
故,由此得出结论,当mapduce运行不下去的情况,则主要检查namenode和datanode之间的通信情况,包括但不限于以下几种:
(1)hosts配置问题,没有把datanode的主机名写入namenode主机的hosts文件中。
(2) slave配置问题, 没有把datanode的主机名写入namenode主机的slave文件中。
(3) ssh无密码访问没有配置。
二、
如果进行上述操作后仍然卡死在kill command那还有一种可能就是NodeManager分配的物理内存太小,导致任务无法提交,以致假死现象。那么可以通过修改配置文件来增大物理内存大小。
我们可以通过命令行修改配置文件,找到yarn-site.xml配置文件加入下面内容:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
yarn.scheduler.minimum-allocation-mb下的value值2048可以根据自己主机的内存进行更改。