HIVE的几个使用技巧

1.小表在前,大表在后,如果表很小就用mapjoin

写JOIN的时候,将小表写在JOIN的前面,这样HIVE就会将小表载入内存,然后扫描大表。

如果表足够的小,就使用map join。

2.设定map的并发数,保证一次map结束;根据输入数据量估计reduce的tasks数目,并根据运行中间数据情况修正;

http://superlxw1234.iteye.com/blog/1582880

3.临时表能提升计算速度

在处理海量数据时我们通常会对很多大表进行操作,基于Hadoop现在的局限性,不能像分布式并行数据库那样很好地在分布式环境利用数据局部性,Hadoop对于大表只能全表扫描并筛选数据,而每一次对大表的扫描都是苦不堪言的。(最后知道真相的我眼泪掉下来。。。)所以我们会用到在编码中经常用到的重构技巧,提取公共变量,在Hive中,就是创建临时表。

4.Union all在数据对齐中的使用;

不支持 top level,以及各个select字段名称、属性必须严格一致

5.Hive支持跨数据库查询

比如database arch的table1和database algo的table2 进行joinA: 可以,只要有用户有这两张表的select权限即可,用户需要用“database.table”的方式来指定数据库下的表

6.Hive支持本地执行模式

当数据量小的时候,本地执行比提交到集群上执行效率提升很大

set hive.exec.mode.local.auto=true(默认false)

当一个job满足如下条件才能真正使用本地模式:

  1. job的输入数据大小必须小于参数hive.exec.mode.local.auto.inputbytes.max(默认值128MB)
  2. job的map处理的文件数大于参数hive.exec.mode.local.auto.input.files.max(默认值4)
  3. job的reduce数必须为0或者1,不管是用户设置的还是系统推测出来的

用参数hive.mapred.local.mem(默认0)来设置local mode下mapper和reducer task jvm heap size

7.NULL和数字相加的问题

sum(t.shop_gmvcount + t.gmvcount_new + t.auc_shop_gmvcount + t.spu_gmv_cnt) gmv_cnt,这样的统计结果,当t.t.shop_gmvcount为null时,即使后面的t.gmvcount_new 不为null,那么总计的结果这个计算仍然是null;修改的方法是:采用sum(coalesce(t.shop_gmvcount,cast(0 as bigint)) + coalesce(t.gmvcount_new,cast(0 as bigint))这样的方式,coalesce函数类似于oracle数据库里面的nvl。

参考文章:

Hive 在多维统计分析中的应用 & 技巧总结 http://my.oschina.net/leejun2005/blog/121945
hive本地mr http://superlxw1234.iteye.com/blog/1703546
hive优化之------控制hive任务中的map数和reduce数 http://superlxw1234.iteye.com/blog/1582880
Hive Tips http://blog.hesey.net/2012/04/hive-tips.html

本文收集自网络;

转载请注明来源:http://crazyant.net/1404.html

相关推荐

Leave a Comment