分享

一个奇怪的hive执行现象,复杂的SQL仅仅在一台机器上执行

环境说明
hadoop2.6
hive1.0
启动3个节点,如下图说明,还有个节点不知道为什么一直在集群中不能显示,但是在节点上通过jps能看到运行了datanode和nodemanager
疑问1:为什么启动了之后集群中没有显示节点?
集群.jpg
数据通过load方式导入hive表里面,数据大小450M,HDFS默认128M一个文件
问题如下:
select count(*) from men_info_3 group by orgnum;
hive日志显示(部分日志):
Hadoop job information for Stage-1: number of mappers: 2; number of reducers: 2
执行计划如下(部分内容):
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1
表示有2个map和2个reduce,我的理解应该是在2台机器上运算,但是看MR的运行情况却发现只
在一台机器上执行,如下图:
运行.jpg
疑问2:为什么是在一台机器上允许而不是二台机器上允许,不管SQL语句多么复杂都是在一台机器上运行,有时候在slave1上有时候在slave3上运行

已有(11)人评论

跳转到指定楼层
arsenduan 发表于 2015-4-10 21:31:34
这个跟内存的设置有关系,把内存设置小点试试。
下面是hadoop的,跟hive是同样的道理。
########################################
默认情况下,各个节点的负载不均衡(任务数目不同),有的节点很多任务在跑,有的没有任务,怎样让各个节点任务数目尽可能均衡呢?

  答: 默认情况下,资源调度器处于批调度模式下,即一个心跳会尽可能多的分配任务,这样,优先发送心跳过来的节点将会把任务领光(前提:任务数目远小于集群可以同时运行的任务数量),为了避免该情况发生,可以按照以下说明配置参数:

  如果采用的是fair scheduler,可在yarn-site.xml中,将参数yarn.scheduler.fair.max.assign设置为1(默认是-1,)

  如果采用的是capacity scheduler(默认调度器),则不能配置,目前该调度器不带负载均衡之类的功能。

  当然,从hadoop集群利用率角度看,该问题不算问题,因为一般情况下,用户任务数目要远远大于集群的并发处理能力的,也就是说,通常情况下,集群时刻处于忙碌状态,没有节点一直空闲着。


详细参考:
Hadoop YARN常见问题以及解决方案

回复

使用道具 举报

arsenduan 发表于 2015-4-10 21:33:05
web界面跟cmd line是两种不同的显示方式,web界面可能存在一些bug或则一场,有时候存在这种情况。
建议楼主重启下,看看
回复

使用道具 举报

尘世随缘 发表于 2015-4-10 22:25:29
arsenduan 发表于 2015-4-10 21:33
web界面跟cmd line是两种不同的显示方式,web界面可能存在一些bug或则一场,有时候存在这种情况。
建议楼 ...

我改小了内存,64M,但是运行后报错了,错误信息如下;
Hadoop job information for Stage-1: number of mappers: 2; number of reducers: 2
2015-04-10 14:09:49,476 Stage-1 map = 0%,  reduce = 0%
2015-04-10 14:10:25,976 Stage-1 map = 100%,  reduce = 100%
Ended Job = job_1428645885603_0002 with errors
Error during job, obtaining debugging information...
Examining task ID: task_1428645885603_0002_m_000001 (and more) from job job_1428645885603_0002

Task with the most failures(4):
-----
Task ID:
  task_1428645885603_0002_m_000000

URL:
  http://master:8088/taskdetails.jsp?jobid=job_1428645885603_0002&tipid=task_1428645885603_0002_m_000000
-----
Diagnostic Messages for this Task:
Error: Java heap space


重新修改内存大小(配置文件为:hdfs-stie.xml):
<property>
  <name>mapreduce.map.memory.mb</name>
  <value>128</value>
</property>
<property>
  <name>mapreduce.map.java.opts</name>
  <value>-Xmx256M</value>
</property>
<property>
  <name>mapreduce.reduce.memory.mb</name>
  <value>128</value>
</property>
<property>
  <name>mapreduce.reduce.java.opts</name>
  <value>-Xmx128M</value>
</property>

可以计算结果,但是依然是在一台机器上运行的。


回复

使用道具 举报

nextuser 发表于 2015-4-10 23:26:44
尘世随缘 发表于 2015-4-10 22:25
我改小了内存,64M,但是运行后报错了,错误信息如下;
Hadoop job information for Stage-1: number of ...

采用的什么调度方式
在yarn-site.xml中,将参数yarn.scheduler.fair.max.assign设置为1试试
记得修改完让其生效
回复

使用道具 举报

nextuser 发表于 2015-4-10 23:28:04
尘世随缘 发表于 2015-4-10 22:25
我改小了内存,64M,但是运行后报错了,错误信息如下;
Hadoop job information for Stage-1: number of ...

可能设置的太小,不能满足单个任务
回复

使用道具 举报

尘世随缘 发表于 2015-4-11 23:49:04
nextuser 发表于 2015-4-10 23:28
可能设置的太小,不能满足单个任务

您说的2个设置都设置过了,第一个设置为1的,执行统计后hive不能出结果,无奈只能重新恢复环境。
现在执行一个count操作后,主要显示这样的:

Hadoop job information for Stage-1: number of mappers: 8; number of reducers: 1


但是结果还是在一台机器上执行count操作,如下图:
hive客户端的输出情况
count.png
yarn上看到的任务运行情况
000.png

集群.jpg
回复

使用道具 举报

尘世随缘 发表于 2015-4-12 00:36:45
再补充下:
我在yarn-site.xml中设置每个slave的最大内存为2G,3个节点累计6G内存,现在HIVE执行一个执行一个分组的统计,在资源管理上看需要使用4.69 GB内存,我想此时应该是在多台机器上执行了吧,但是结果还是在一台机器上执行:
123.png

456.png

求高手解答下。
回复

使用道具 举报

bioger_hit 发表于 2015-4-12 11:12:29
尘世随缘 发表于 2015-4-12 00:36
再补充下:
我在yarn-site.xml中设置每个slave的最大内存为2G,3个节点累计6G内存,现在HIVE执行一个执行 ...

楼主试试其他sql语句。比如select × from table where
回复

使用道具 举报

尘世随缘 发表于 2015-4-12 17:12:29
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条