首页 > 其他分享 >HIVE的几个使用技巧

HIVE的几个使用技巧

时间:2023-02-06 16:07:43浏览次数:66  
标签:shop map 技巧 几个 hive gmvcount HIVE Hive local


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 在多维统计分析中的应用 & 技巧总结


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​


标签:shop,map,技巧,几个,hive,gmvcount,HIVE,Hive,local
From: https://blog.51cto.com/peishuai/6039289

相关文章

  • Hive使用TRANSFORM运行Python脚本总结
    1、Python环境设置可以使用addcachearchive的方法把tar.gz添加到分布式缓存,Hive会自动解压压缩包,但是目录名是和压缩包名称一样的;addcachearchive${env:my_workbenc......
  • 把HIVE程序优化30倍的经验
    今天遇到一个HIVE需求,输入只有4列,大概160MB,需要引用一些字典文件,然后输出70列数据;典型的复杂计算,由于HIVE无法单独实现,采用TRANSFORM写了PYTHON脚本实现; 刚开始写完......
  • Hive中Order by和Sort by的区别是什么?
    Hive基于HADOOP来执行分布式程序的,和普通单机程序不同的一个特点就是最终的数据会产生多个子文件,每个reducer节点都会处理partition给自己的那份数据产生结果文件,这导致了在......
  • 向Hive程序传递变量的三种方法
    ​​​​图1外部向Hive程序中传递变量的方法使用Hive编写程序最常用的方法是将Hive语句写到文件中,然后使用hive-ffilename.hql来批量执行查询语句。经常需要将外部参......
  • Hive的left join、left outer join和left semi join三者的区别
    Hive的Join的文档说明地址:​​​https://cwiki.apache.org/confluence/display/Hive/LanguageManual%2BJoins​​以下为两个测试数据表建表语句:MySQLuse......
  • 利用Charles改写接口数据的几个小方法
    一、测试中常见的问题1、只需要验证一个简单的前端展示效果,但造数困难2、前端改一个问题改了n次,每次都需要不断的造数、验证3、视觉验收反反复复,需要一直配合造数4、依......
  • Python爬虫常用的爬虫注意事项及技巧
    Python爬虫常用的爬虫技巧​​1、基本抓取网页​​​​2、使用代理IP​​​​3、Cookies处理​​​​4、伪装成浏览器​​​​5、页面解析​​​​6、验证码的处理​​​​7......
  • 面试官:实现异步的20种方式,你知道几个?
    文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面......
  • Hive窗口函数中range和rows的区别
    说明聊到hive,就少不了灵活的开窗函数,今天介绍下开窗函数中over子句内部经常会用到的rows和range的用法;数据准备createtabletemp_id_0116(idint)stor......
  • JavaScript中和动画相关的几个事件
    JavaScript中有以下几种与动画相关的事件:requestAnimationFrame这个事件可以在浏览器重绘之前触发,通常用于制作高性能动画。下面是一个使用requestAnimationFrame来制作简......