关于数据倾斜的疑问
1.大小表Join:
使用map join让小的维度表(1000条以下的记录条数) 先进内存,在map端完成join操作。正常情况下join是需要在reduce端执行的,通过map join可以实现在map端执行join操作,
这样可以避免在shuffle的时候造成数据倾斜。
这样子做为什么可以避免shuffle时造成数据倾斜呢?这边的作用是为了避免在reduce端join
的话会产生大量的null值和0值吗?
2.大表Join大表:
把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,
由于null值关联不上,处理后并不影响最终结果。
老师这边大表join大表不是不会产生过多的null值吗? 只有在大表join小表时
才会产生null值不是吗? 这点有点不理解
正在回答 回答被采纳积分+1
1:map端join可以省略掉reduce阶段,此时这个SQL语句底层在执行的时候就只有map阶段了,没有reduce阶段,所以就不会产生shuffle了,那也就可以避免在shuffle的时候造成数据倾斜了,和null值、0值没关系。
2:两个大表join,不适合使用map端join去优化,只能使用默认的reduce端join,这样表中空值的key(空值的key比较多),这样会导致发送数据倾斜,某一个reduce任务会处理空值的key。
此时可以把这个空值的key的值改成一个随机数,这样不影响最终的结果,也变相的解决了数据倾斜。
这里的空值其实说的就是null值,一个意思。这个空值只是代表一个倾斜的key值,这个倾斜的key值也可以是其他值。
所以这里面的多表join时,是否产生null值是要看数据的,如果两份数据关联的key值有很多是null值,这样结果也会有null值,否则不会产生null值,null值在这里只是一个倾斜的key值。
- 参与学习 1151 人
- 提交作业 5960 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星