今天,一大清早同事就让我帮他解决Hive的问题:他在Hive中执行简单的查询(直接从hive查询数据,没有MR过程)能很快的得到结果,但是执行复杂的查询时,就一直卡着不动.我连到服务器上试了一下,跟他遇到的问题一样,问题处在哪里呢?既然简单的查询能出结果,复杂查询需要MR计算,但是却卡住了,那估计是Hadoop的问题.
于是,我在Hadoop跑一个简单的WountCound程序试试,结果跟Hive中遇到的情况一样:
然后就一直卡在这个界面,很久都没有结果.
最先想到的是:配置可能有点问题.于是我把配置检查了一遍,发现配置没错.于是,我又去检查Yarn和HDFS的启动日志,也没有发现ERROR.接着,我查看每个任务运行时的Container日志,也没有Error.真是见鬼了!
在我查看各种日志和配置的时候,我同事在Docker中,将集群上的配置Copy过去,试了一遍,能正常运行!这...
然后,我各种百度,google,在百度出来的各种方法我都试了一遍,仍然没有解决问题!于是,我同事说,是不是安装的时候有些包损坏了.于是,他又重新装了一边Hadoop,还是使用原来的配置,可问题依旧!
此时,都已经搞了一直整天了,还有一个小时就要下班了!于是,我在Google中看了几篇文章,基本上上面所说的方法我都试了.终于,在Stackover上有一个哥们也遇到了同样的问题,有人帮他解决了,里面链接到了一个网站:http://hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/ ,我打开一看,说的是要设置yarn里面关于内存和虚拟内存的配置项.我以前没配置这几项,也能正常运行,感觉是这个问题的可能性不大啊!但是,既然这么多方法都不管用,这能试一试了.
于是,我在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>
然后运行Hive,也能正确的运行了!
出现此故障的原因应该是,在每个Docker分配的内存和CPU资源太少,不能满足Hadoop和Hive运行所需的默认资源需求。特此备忘!