Hive 空 key 转换

有时虽然某个 key 为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在 join 的结果中,此时我们可以表 a 中 key 为空的字段赋一个随机的值,使得数据随机均匀地 分不到不同的 reducer 上。例如: 案例实操: 不随机分布空 null 值: (1)设置 5 个 reduce 个数 set mapreduce.job.reduces = 5; (2) JOIN 两张表 insert overwrite table jointable select n.* from nullidtable n left join bigtable b on n.id = b.id; 结果:如下图所示,可以看出来,出现了数据倾斜,某些 reducer 的资源消耗远大于其 他 reducer 。 Hive 空 key 转换

 

随机分布空 null 值 (1)设置 5 个 reduce 个数 set mapreduce.job.reduces = 5; (2) JOIN 两张表 insert overwrite table jointable select n.* from nullidtable n full join bigtable o on nvl(n.id,rand()) = o.id; 结果:如下图所示,可以看出来,消除了数据倾斜,负载均衡 reducer 的资源消耗 Hive 空 key 转换

 3SMB(Sort Merge Bucket join)

(1)创建第二张大表 Hive 空 key 转换

 测试大表直接 JOIN

Hive 空 key 转换

 (2)创建分通表 1,桶的个数不要超过可用 CPU 的核数

Hive 空 key 转换

(3)创建分通表 2, 桶的个数不要超过可用 CPU 的核数

Hive 空 key 转换

(4)设置参数 Hive 空 key 转换 (5)测试 Hive 空 key 转换

 

上一篇:使用SpringBoot构建项目,加载SSM整合的applicationContext.xml的注解


下一篇:MySQL学习