开发者社区 > 大数据与机器学习 > 开源大数据平台 E-MapReduce > 正文

spark sql 使用row_number 出现oom

使用Spark sql 窗口函数发现生成的task太少导致任务经常oom请问有什么方式可解决数据倾斜

展开
收起
游客i2i2woqz56cas 2023-04-07 20:08:51 1427 0
2 条回答
写回答
取消 提交回答
  • 坚持这件事孤独又漫长。

    数据倾斜是指在数据处理过程中,某些分区的数据量远远大于其他分区,导致某些任务的执行时间远远长于其他任务,最终导致任务失败或oom。以下是解决数据倾斜的几种方式:

    • 增加并行度:可以使用repartitioncoalesce方法增加分区数,从而增加并行度。但是要注意,增加分区数并不一定能解决数据倾斜问题,还需结合其他策略。

    • 使用随机数解决数据倾斜:如果数据倾斜是因为某些数据的key值太大导致的,可以使用随机数方式将key值分散到多个分区中,从而解决数据倾斜。具体的做法是:将key值与一个0到分区数之间的随机数相加得到新的key值,然后再进行处理。

    • 使用聚合操作解决数据倾斜:根据业务需求,可以尝试使用聚合操作,如group bydistinct等来解决数据倾斜。聚合操作可以减少某些分区的数据量,从而达到均衡各个分区的目的。

    • 使用动态分区预防数据倾斜:在一些变量数据key较多的时候,可以预先设定多个桶,计算出各个桶的数据分配情况,并动态的加入新的桶,这样就能够均衡各个分区的数据量。

    • 增加机器资源:如果以上方法都无法解决数据倾斜问题,最后的解决方式就是增加机器资源,如增加节点、增加内存等。

    2023-04-08 20:11:45
    赞同 展开评论 打赏
  • 可以试试这个是否可以。

    1. 增加reduce 聚合操作的内存的比例
    2. 增加Executor memory的大小 --executor-memory 5G
    3. 减少reduce task每次拉取的数据量 设置spak.reducer.maxSizeInFlight 24m, 拉取的次数就多了,因此建立连接的次数增多,有可能会连接不上(正好赶上map task端进行GC)
    
    2023-04-08 08:41:31
    赞同 展开评论 打赏

阿里云EMR是云原生开源大数据平台,为客户提供简单易集成的Hadoop、Hive、Spark、Flink、Presto、ClickHouse、StarRocks、Delta、Hudi等开源大数据计算和存储引擎,计算资源可以根据业务的需要调整。EMR可以部署在阿里云公有云的ECS和ACK平台。

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载