关于数据倾斜的疑问

关于数据倾斜的疑问

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回答
徐老师 2022-06-17 17:54:57

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值。

  • 提问者 CDWei #1
    老师,那小表再map端join之后,会再和大表join吗? 还是大小表join是指大小表在map端join?
    2022-06-17 19:23:10
  • 徐老师 回复 提问者 CDWei #2
    Map端join是指大表和小表在map阶段join
    2022-06-17 19:26:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师