最近微博有一个任务需要使用日曝光表做统计,发现这个任务很容易在stage1卡在reduce100%阶段不动,发邮件过来让帮找一下问题或者优化一下,和同事一起分析了一下原因,以下是分析过程:

1、分析hql

add file get_recept_mid.sh;
add file get_last_expo_mid.sh;
add file get_real_recept.py;
insert overwrite directory '/user/liangjun/hive-liangjun/'
select transform(t2.uid,t7.mid,t2.expo_mid) using 'python get_real_recept.py' as uid,real_recept
from ( select transform(t6.*) using 'sh get_recept_mid.sh' as uid,mid from ( select t3.fans_uid,t4.mid from ( select fans_uid,uid from mds_user_fanslist where    dt=20140926 ) t3 join ( select transform(t5.*) using 'sh get_recept_mid.sh' as uid,mid from ( select uid,mid from mds_bhv_pubblog where dt=20140926 distribute by uid sort by uid ) t5   ) t4 on t3.uid=t4.uid distribute by t3.fans_uid sort by t3.fans_uid ) t6 ) t7 join    ( select transform(t1.*) using 'sh get_recept_mid.sh' as uid,expo_mid from ( select t8.* from ( select transform(ods_tblog_expo.uid,ods_tblog_expo.mid_list) using 'sh get_last_expo_mid.sh' as uid,mid from ods_tblog_expo where dt=20140926 and interface_id in ('1','5') ) t8 distribute by t8.uid sort  by t8.uid ) t1 ) t2 on t7.uid=t2.uid;

该hql有个特点:使用了多个脚本,包括python、shell

2、看是否有报错信息:

没有发现报错,但是卡在selectoperator处:

2014-09-29 10:22:23,162 INFO ExecReducer: ExecReducer: processing 10000000 rows: used memory = 110701640
2014-09-29 10:22:23,162 INFO org.apache.hadoop.hive.ql.exec.ExtractOperator: 2 forwarding 10000000 rows
2014-09-29 10:22:23,162 INFO org.apache.hadoop.hive.ql.exec.SelectOperator: 3 forwarding 10000000 rows

3、看是否有数据倾斜问题

查看了已经运行完成的reduce和卡住的reduce的counter信息,几个重要指标(FILE_BYTES_READ、FILE_BYTES_WRITTEN、HDFS_BYTES_WRITTEN)都差不多,不存在数据倾斜问题,但是FILE_BYTES_READ一直在动,而HDFS_BYTES_WRITTEN一直没反应。

4、查看了一下卡住的reduce任务java进程使用内存和cpu的情况

根据50030监控页面,找到卡住reduce任务运行所在的节点,根据任务id找到对应的进程id,分别通过jstat -gcutil ${pid} 1000,和top -p ${pid}查看内存和cpu使用情况,发现内存使用很少,cou使用也很低,排除是java进程内存不够和cpu使用过高问题的原因。

5、查看stage1 reduce阶段的执行计划:

Reduce Operator Tree:ExtractSelect Operatorexpressions:expr: _col0type: stringexpr: _col1type: stringoutputColumnNames: _col0, _col1Transform Operatorcommand: sh get_recept_mid.shoutput info:input format: org.apache.hadoop.mapred.TextInputFormatoutput format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormatFile Output Operatorcompressed: falseGlobalTableId: 0table:input format: org.apache.hadoop.mapred.SequenceFileInputFormatoutput format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

从执行计划上面看出,stage1的reduce阶段使用了get_recept_mid.sh脚本,该脚本内容如下:

awk -F"\t" 'BEGIN{last=""}{if(last!=$1&&last!=""){print last"\t"midsmids=""}if(mids==""){mids=$2}else{mids=mids","$2}last=$1
}END{print last"\t"mids
}' /dev/stdin

是一个awk,按理说awk还是很高效的。

既然使用了awk,在运行的时候肯定会起一个进程,我们来查看一下awk进程的内存和cpu使用情况,登陆到运行卡住recue任务的节点,执行top命令,发现确实有一个awk的进程,top -p ${pid},如下图所示:

发现awk实际使用的内存为13M,而且cpu使用达到100.3%,从这两个信息来看应该awk的问题导致reduce被卡住了,以下是找到的awk相关资料:

“awk有两种工作方式:交互方式及非交互方式。交互方式即输入数据由用户通过键盘输入,此时awk使用行缓冲区,每接收到一行输入数据立即输出。非交互方式的输入数据通过文件或管道输入,此时只有输入缓冲区满了才会输出,对于一些实时性的应用这种方式会带来困扰“

既然找到了问题的原因就好办了,解决办法将缓冲区的数据刷出去,修改后的脚本内容:

awk -F"\t" 'BEGIN{last=""}{fflush("")if(last!=$1&&last!=""){print last"\t"midsmids=""}if(mids==""){mids=$2}else{mids=mids","$2}last=$1
}END{print last"\t"mids
}' /dev/stdin

从新提交job,发现很快运行完成,reduce被卡住问题解决。

参考:

http://hi.baidu.com/lyugb/item/3351d6100d7e7dfc756a8499

同事博客地址:http://dj1211.com/

hive任务卡在个别reduce的问题分析相关推荐

  1. Hive mapreduce的map与reduce个数由什么决定?

    文章目录 1.MapTask的数量决定 2.如何来调整MapTask的数量 2.1 增加map的数量 : 调小maxsize (要小于blockSize才有效,比如100byte) 2.2 减少map ...

  2. Motor XT615 开机无限卡屏重启的取证与分析

    hello,大家好! 今天我给大家你们带来摩托罗拉 XT615 开机无限卡屏重启的取证与分析, 手机开机后卡屏,一直停留下面这画面,无限重启! 接下来,经过我们工程师的分析,图上报错必定由于机身程序太 ...

  3. Hive 任务卡在 map = 0%, reduce = 0%

    Hive 卡在map = 0%, reduce = 0%阶段 解决:增加map个数,设置mapreduce.input.fileinputformat.split.maxsize 小于系统默认值,需要 ...

  4. python【力扣LeetCode算法题库】914. 卡牌分组(reduce collections.Counter)

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...

  5. Hive中视图机制的初步使用及分析

    作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/04/29/hiv ...

  6. Hive map阶段缓慢,优化过程详细分析

    背景 同事写了这样一段HQL(涉及公司数据,表名由假名替换,语句与真实场景略有不同,但不影响分析): CREATE TABLE tmp AS SELECT t1.exk, t1.exv, M.make ...

  7. 增加 addDataScheme(file) 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略...

    http://blog.csdn.net/silenceburn/article/details/6083375 =========================================== ...

  8. 第十篇:Map/Reduce 工作机制分析 - 数据的流向分析

    前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...

  9. H5页面卡顿加载慢原因分析

    H5页面卡顿原因分析: 1.动画太多:渲染重绘占用GPU 2.页面操作导致重绘频繁 3.页面元素复杂:资源类标签太多(图像/视频/dom树太长) 4.内置webview性能太差 5.和3类似,iOS出 ...

最新文章

  1. Linux Shell脚本攻略学习总结:二
  2. 异步接口同步返回_Dubbo客户端异步接口的实现背景和实践
  3. PP部分主数据导出SQVI设置
  4. “90后”变“韭零后”,大数据告诉你谁是基民主力军?
  5. 精妙SQL语句【转】
  6. CodeForces 176A Trading Business 贪心
  7. java java.doc_使用 javadoc 自动生成 Java 文档
  8. cobar_note
  9. 按键精灵文字识别插件_按键精灵课程学习目录
  10. 由连连看游戏作弊器想到的
  11. safari 浏览器版本升级后提示“此网页出现问题,已重新载入网页” 解决办法
  12. 将Unity地形以Wavefront Obj格式导出
  13. 微信小程序获取用户运动步数后端返回-41003
  14. Educational Codeforces Round 131 (Rated for Div. 2) A-D题解
  15. 祝大家2016中秋佳节快乐!阖家幸福安康!!
  16. 用U盘安装系统完全教程
  17. postman 1—官网下载及安装
  18. R语言ineq算基尼系数_R语言常用计量分析包
  19. React 源码学习
  20. 29个网络营销必须知道的数据

热门文章

  1. 天猫HTMl静态页面
  2. onclick事件传参时传中文传不过去
  3. 堡垒机定义、由来以及价值简单说明
  4. Win7防火墙允许ping
  5. 日历签到html,简单的手机移动端日历签到js代码
  6. python 爬虫 kugou音乐详细教程(requests模块)
  7. java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间
  8. Mac M1 踩坑之Tensorflow安装 Processed finished with exit code 132
  9. 屏蔽ip段访问 html,限制某IP段对网页的访问(ASP)
  10. 十三、添加RD 会话主机角色