一次查询2

来源:互联网 发布:淘宝能改店铺名称吗 编辑:程序博客网 时间:2024/05/21 11:09

用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;后来降了一维为减轻倾斜的维度后第一阶段正常运行,但是第二阶段倾斜如上所述。
这里写图片描述
这里写图片描述