Hive 笔记五 hive的优化

  • 1.参数调整

本地模式
严格模式
JVM重用
并行执行
推测还行
合并小文件
Fetch模式

  • 2.SQL优化

1.列裁剪和分区裁剪
列裁剪是在查询时只读取需要的列;分区裁剪就是只读取需要的分区。
2.sort by 代替 order by
3.group by
代替 count(distinct)

  • 3.join 基础优化

1、common join
普通连接,在SQL
中不特殊指定连接方式使用的都是这种普通连接。
缺点:性能较差(
要将数据分区,有shuffle)

2.map join
map端连接,与普通连接的区别是这个连接中不会有
reduce阶段存在,连接在map端完成
适用场景:大表与小表连接,小表数据量应该能够完全加载到内存,否则不适用

3、bucket map join
分桶连接:Hive
建表的时候支持hash 分区通过指定clustered by (col_name,xxx ) into number_buckets buckets 关键字.当连接的两个表的join key 就是bucket column 的时候,就可以通过设置hive.optimize.bucketmapjoin= true 来执行优 化。
原理:通过两个表分桶在执行连接时会将小表的每个分桶映射成hash
表,每个task节点都需要这个小表的所有hash表,但是在执行时只需要加载该task所持有大表分桶对应的小表部分的hash表就可以,所以对内存的要求是能够加载小表中最大的hash块即可。
注意点:小表与大表的分桶数量需要是倍数关系,这个是因为分桶策略决定的,分桶时会根据分桶字段对桶数取余后决定哪个桶的,所以要保证成倍数关系。
优点:比map join
对内存的要求降低,能在逐行对比时减少数据计算量(不用比对小表全量)
缺点:只适用于分桶表

 

  • 4.总结从大的方面来说,优化可以从几个方面着手:
1.好的模型设计,事半功倍
2.解决数据倾斜问题。仅仅依靠参数解决数据倾斜,是通用的优化手段,收获有限。开发人员应该熟悉业务,了解数据规律,通过业务逻辑解决数据倾斜往往 更可靠
3.减少 job
4,.设置合理的 map reduce task
5.对小文件进行合并,是行之有效的提高 Hive 效率的方法
6.优化把握整体,单一作业的优化不如整体最优

 

你可能感兴趣的:(HDFS)