文章目录
一、Hive使用本地模式执行操作(Hive使用资源大于20M的时候还是会采用集群yarn的方式运行)
将hive的job交给yarn执行太慢,hive支持本地模式
設置本地模式之前的,耗時 9.068
設置本地模式之后的,耗時 0.29
具体设置方法
1.1、设置临时的
在每次执行hql语句之前 都要先执行下面这句话
set hive.exec.mode.local.auto=true;
1.2、修改hive配置文件(hive-site.xml),永久有效
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
注意 今天发现这种设置永久有效的方式,不够灵活,如果后期查询语句需要占用内存过大的时候 极 容易报错,所以,我就又在 hive-site.xml 中把这几行 注释了。每次都用临时,就比较灵活了。
二、盡量多使用group by 來去重
2.1、问题:Ggroup by非常容易造成数据倾斜 将Map阶段同一Key数据分发给一个reduce,
当一个key数据过大时就倾斜了。
2.2、解决方法:
开启map端聚合 相当于combiner
2.2.1、是否在Map端进行聚合,默认为True
set hive.map.aggr = true(默认已经是true)
2.2.2、有数据倾斜的时候进行负载均衡(默认是false)
set hive.groupby.skewindata = true
2.2.3、这样解决的原因
生成两个mr job,第一个mr 把相同的key 分发到不同的reduce做一个聚合 从而达到负载均衡的目的
第二个mr 将相同的key分发到一个reduce中,最后完成最终的聚合操作。
三、大小表 join的时候 把小表放在左边,这样就会把小表放到内存中 进行 map端join 较少了数据倾斜和提高运行效率
但是在新版本中 hive已经做了优化 小表坊左边和右