首页 > 代码库 > Hive任务优化
Hive任务优化
- rom logs
- where log_date = 20130803 and item_id = 3
- )t
设置Job间并行的参数是Hive.exec.parallel,将其设为true即可。默认的并行度为8,也就是最多允许sql中8个Job并行。如果想要更高的并行度,可以通过Hive.exec.parallel. thread.number参数进行设置,但要避免设置过大而占用过多资源。
减少Job数
另外在实际开发过程中也发现,一些实现思路会导致生成多余的Job而显得不够高效。比如这个需求:查询某网站日志中访问过页面a和页面b的用户数量。低效的思路是面向明细的,先取出看过页面a的用户,再取出看过页面b的用户,然后取交集,代码如下:
[js] view plaincopy
- select count(*)
- from
- (select distinct user_id
- from logs where page_name = ‘a’) a
- join
- (select distinct user_id
- from logs where blog_owner = ‘b’) b
- on a.user_id = b.user_id;
这样一来,就要产生2个求子查询的Job,一个用于关联的Job,还有一个计数的Job,一共有4个Job。
但是我们直接用面向统计的方法去计算的话(也就是用group by替代join),则会更加符合M/R的模式,而且生成了一个完全不带子查询的sql,只需要用一个Job就能跑完:
[js] view plaincopy
- select count(*)
- from logs group by user_id
- having (count(case when page_name = ‘a’ then 1 end) > 0
- and count(case when page_name = ‘b’ then 1 end) > 0)
第一种查询方法符合思考问题的直觉,是工程师和分析师在实际查数据中最先想到的写法,但是如果在目前Hive的query planner不是那么智能的情况下,想要更加快速的跑出结果,懂一点工具的内部机理也是必须的。(作者:孙逸 / 审校:刘亚琼)
作者介绍:孙逸,zamplus,数据仓库工程师。从事数据仓库平台建设与数据产品开发,热衷于研究大数据相关的计算技术,并应用于实践之中,让数据产生真正价值。
本文为CSDN原创文章,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)
Hive任务优化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。