1.hive数据库调优之路
1.关于in使用的悲剧。
目前公司使用db2数据库(主要),另外也有部分的大数据相关的业务,数据量超级大,主要有hive,hbase,spark等。今天终于有机会在大数据平台hive上跑数据,异常的兴奋,三下五除二写完了代码,开始跑。故事就这么开始了。
涉及到的表有:temp_A(a1,b1,c1):字段有3个,数据量:1600行左右。
temp_B (a1,b1,d,e.....)字段至少三十个,数据量:1600多亿条数据。
进行了如下的查询:
select b.phone_number,b.option_times from temp_A a
left join temp_B on b on a.a1=b.a1 and a.b1=b.b1
where x_id='3423' and op_num='2323' and option_time in('201401 ',' 201402','201403');
在hive平台进行调度,跑了10分钟,map任务执行了8%,并且严重的占用了资源,导致其他同事的程序也跑不了,最后找到了我的头上,kill了程序。
进行修改:
建立临时表temp_C
for i in 201401 201402 201403
do
insert into table temp_C
select a1 ,b1,phone_number,opsition_time from temp_B where x_id='3423' and op_num='2323' and option_time =${i}
done
执行完毕后temp_c的数据量大概有23万之多。此程序的调度时间大概10分钟就跑完了。剩下的问题就简单了 。
总结:上述说明了两个问题,第一,大数据,hive可以处理的数据量很大,处理数据的能力也很强,但是这并不代表你可以 为所欲为的占用资源;第二,不管是sql还是hql语言,调优很重要。
温馨提示:在hive中insert语句:insert into table tab_name.
-----------------------------------------------------完美分根线--------------------------------------------------------------
----------------------周末我会对hive的基础 操作和概念进行一些简单的总结,谢谢大家支持。假装有很多人【傲娇】------------
2.Java开发