公司这边有个数据聚合的任务,聚合的过程中遇到了数据倾斜,通过局部聚合和全局聚合的方式解决,速度提升了很多,12G 的数据大概需要 15 分钟左右聚合完,但是在最后以 json 格式的文件存储到 hdfs 上时特别耗时,而且偶尔会报内存溢出,spark.default.parallelism 设置的是 200,最后保存时是这么写的:df.repartition(20).write.json(savePath),求 spark 大神指点我哪里有问题,该怎么解决这个问题?谢谢。
1
linuxchild Dec 25, 2017
压缩一下再写试试
|
2
wudc OP @linuxchild 嗯,谢谢,我加上了这段代码 df.persist(StorageLevel.MEMORY_AND_DISK_SER),现在程序在跑
|
3
F281M6Dh8DXpD1g2 Dec 25, 2017
df.repartition(20) 这样不是只起二十个 partition 在写么
直接 df.write.json 试试? |
5
mind3x Dec 25, 2017
用 coalesce(20) 试试
|
8
Mondoz Dec 25, 2017
同 coalesce
|
9
wudc OP @zhusimaji 卡在 df.repartition(20).write.json(savePath)这行了,数据量比较小时还可以但是数据量一大就栈溢出
|
11
F281M6Dh8DXpD1g2 Dec 25, 2017
可以先 df.repartition(20) 看看执行计划
然后你就明白为啥这么慢了 |
17
zhusimaji Dec 26, 2017
oom 产生的原因很多,最好根据打印的 log 日志去找相对应的资料
|