一次查询2

用df计算sql,写入hive表,用相同的聚合处理3类不同的distinct(因为一次只算一个distinct可以利用shuffle的分发,提高速度,对大数据量的处理,比如20亿条数据distinct,大概只能一次distinct一个值了。)发现对于数据量较小的第二,第三块处理时间较快,对较多的groupping sets产生数据也较少,而对第一个有20亿条需要处理的部分则输入50G,产生2Tgroupping后的数据,之后在再次聚合的时候应该发生了倾斜。问题在于:对于同样的输入,为什么一开始input就大小不一样?shuffle write输出了什么,为什么50G输入会输出2T数据?如果第一部分聚合好,第二部分不应该倾斜,原因是什么?

倾斜情况观察

其实30min基本上stage3就剩20个task了,但是最后一个执行两小时都没执行完
观察正在运行的task,输入38G,其他完成的task有几G的,有几百兆的,所以判定是倾斜了
看已完成的任务,有75%的输入只有5G,而最大的却到了34G;这样的任务即使能跑通一天,后续也会经常出问题

输入输出让我不能理解的地方
这里写图片描述
这里写图片描述

另外当聚合的group维度上升到7维时,执行第一阶段任务大批量失败,应该是executor的内存满了,报错是can not find address;后来降了一维为减轻倾斜的维度后第一阶段正常运行,但是第二阶段倾斜如上所述。
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值