hive通用优化-join优化

本文介绍了Hive中不同join优化方法,如mapjoin适用于小表join大表,reducejoin适用于大表join大表,而bucketjoin包括bucketmapjoin和sortmergebucketjoin,分别针对有序数据和特定条件。讲解了配置参数及适用场景。

        底层还是mr的join优化。map join适合小表join大表或者小表join小表。

#是否开启自动转为mapjoin 在满足条件的情况下 默认true
hive.auto.convert.join=true

Hive老版本
#如果参与的一个表大小满足条件 转换为map join
hive.mapjoin.smalltable.filesize=25000000  


Hive2.0之后版本
#是否启用基于输入文件的大小,将reduce join转化为Map join的优化机制。假设参与join的表(或分区)有N个,如果打开这个参数,并且有N-1个表(或分区)的大小总和小于hive.auto.convert.join.noconditionaltask.size参数指定的值,那么会直接将join转为Map join。
hive.auto.convert.join.noconditionaltask=true 
hive.auto.convert.join.noconditionaltask.size=512000000 

        reduce join适合于大表join大表。

        bucket join适合于大表join大表。

                方式一:Bucket map join

语法: clustered by colName(参与join的字段)
参数: set hive.optimize.bucketmapjoin = true
要求: 分桶字段 = Join字段 ,分桶的个数相等或者成倍数,必须是在map join中

                方式二:sort merge bucket join

基于有序的数据Join
语法:clustered by colName sorted by (colName)
参数
	set hive.optimize.bucketmapjoin = true;
	set hive.auto.convert.sortmerge.join=true;
    set hive.optimize.bucketmapjoin.sortedmerge = true;
    set hive.auto.convert.sortmerge.join.noconditionaltask=true;
    
要求: 分桶字段 = Join字段 = 排序字段,分桶的个数相等或者成倍数

### Hive优化 Join 操作的最佳实践和特征分析 #### 特征分析 HiveJoin 操作本质上依赖 MapReduce 或其他执行引擎(如 Tez、Spark)完成数据的连接运算。为了提升性能,Hive 提供了一系列内置机制和支持选项来优化这种复杂的操作过程[^1]。以下是几个主要特征: - **Map-Side Join**: 如果其中一个表非常小以至于可以完全加载到内存中,则可以通过广播该小型表至各个节点上来减少 Shuffle 过程中的网络传输开销。这种方式被称为 Map-side join 或 Broadcast join[^4]。 - **Bucketed Map-Join**: 当两张表都已经按照某个字段进行了分桶(bucket),并且这两个字段正好参与了 join 条件时,就可以利用 Bucketed map-joins 技术进一步降低 I/O 成本。此方法假设输入已经过适当预处理以便匹配相应的 bucket 边界条件[^3]。 - **Skew Join Optimization**: 处理倾斜分布的数据集是一项重要挑战。如果发现某些 key 导致过多的任务积压,那么应该启用 skew join optimization 功能来自动生成额外的工作流路径以缓解瓶颈效应[^5]。 #### 方法介绍 除了上述提到的技术手段外,还有以下几个通用建议可以帮助改善 Hive 查询的整体表现: ##### 合适文件存储格式 选择高效的压缩算法与二进制编码方案(Parquet/ORC 等),不仅有助于减小程序读写的物理磁盘占用空间大小,而且还能加速解析速度,间接促进整个作业链路吞吐率的增长水平[^1]。 ##### 减少笛卡尔乘积风险 确保每一步转换环节都尽可能早地过滤掉无关记录项,防止意外形成不必要的全组合爆炸现象发生。例如合理运用 WHERE 子句限定范围;或者借助 CBO(cost-based optimizer) 自动调整计划树结构达到目的[^2]。 ##### 并行度调节 通过修改 session 层面的相关参数配置(mapred.reduce.tasks / tez.grouping.min-size & max-size etc.) 控制 reduce phase 的并发数规模,找到平衡点满足时效性和稳定性双重诉求[^4]. ```sql SET hive.exec.parallel=true; SET hive.exec.reducers.bytes.per.reducer=67108864; -- 64MB per reducer as an example value. ``` ##### 使用索引 虽然 Hive 不像传统 RDBMS 那样提供完整的 B-tree style indexing mechanism,但是仍然支持创建简易版本 bitmap/sorted indexes 加速特定场景下的检索效率[^3]. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值