当前位置: 首页 > news >正文

Spark性能调优

Spark性能调优

  • executor内存不足
  • 用`UNION ALL`代替`UNION`
  • persist与耗时监控
  • 用OR替换UNION ALL
  • 用JOIN替换IN

executor内存不足

  1. 问题表现1:Container xx is running beyond physical memory limits. Current usage: xxx GB of x GB physical memory used; xx GB of x GB virtual memory used…
    原因:这个报错显而易见,数据使用的内存超过了这个executor分配的内存
  2. 问题表现2:长时间的 Fail to get RpcResponse: Timeout,最后会报heartbeat心跳检测失败而任务失败
    原因:实际上同样是因为内存不足,导致GC而超时,最终失败

解决:
1 首先可以尝试开大executor的内存分配
2 如果配置的内存无法满足数据内存,可以尝试:
2.1 增加大数据量位置的repartition数

   val allDf = sourceDf.repartition(5000).flatMap(row => { }).toDF()

2.2 增加spark session的超时时间

    val ss = SparkSession.builder().config("spark.sql.shuffle.partitions", 1000).config("spark.driver.maxResultSize", "20g").config("hive.exec.dynamic.partition", true).config("hive.exec.dynamic.partition.mode", "nonstrict").config("hive.exec.parallel", true).config("mapred.max.split.size", 64000000).config("mapred.min.split.size.per.node", 64000000).config("mapred.min.split.size.per.rack", 64000000).config("hive.exec.reducers.bytes.per.reducer", 256000000).config("hive.exec.reducers.max", 2000).config("hive.merge.mapredfiles", true).config("hive.merge.smallfiles.avgsize", 128000000).config("hive.merge.size.per.task", 128000000).config("spark.yarn.executor.memoryOverhead", "10g").config("spark.network.timeout", 10000000)	// 调大.enableHiveSupport().getOrCreate()

UNION ALL代替UNION

UNION会默认对两个表的结果进行去重,如果没有去重的需要,就使用UNION ALL,速度会更快

persist与耗时监控

在主流程的对运算结果调用处persist,并打点进行耗时监控。而不是在运算方法内部persist,便于看清每一步的运算时间。

用OR替换UNION ALL

UNION ALL 操作会消耗大量的内存和CPU,如果可能,尽量减少使用。在这个查询中,你可以尝试将三个 UNION ALL 的查询合并为一个,使用 OR 条件来替代。

用JOIN替换IN

http://www.lryc.cn/news/293005.html

相关文章:

  • flutter开发实战-Camera自定义相机拍照功能实现
  • LeetCode15. 三数之和
  • Docker搭建MySQL8主从复制
  • 【前端】日期转换
  • Git 怎么设置用户的权限
  • 大端和小端模式介绍
  • 【vue】报错 Duplicate keys detected 解决方案
  • 机器学习_13_SVM支持向量机、感知器模型
  • OpenCV学习记录——轮廓检测
  • FreeRTOS任务挂起以及延时部分源码分析
  • oracle数据库慢查询SQL
  • C语言搭配EasyX实现贪吃蛇小游戏
  • # 软件安装-Linux搭建nginx(单机版)
  • 成熟的汽车制造供应商协同平台 要具备哪些功能特性?
  • React16源码: React中处理ref的核心流程源码实现
  • ref和reactive
  • 掌握数据预测的艺术:线性回归模型详解
  • STM32F407移植OpenHarmony笔记8
  • C++:输入流/输出流
  • 十、Qt三维图表
  • CMake官方教程中文翻译 Step 6: Adding Support for a Testing Dashboard
  • 【leetcode】完全背包总结
  • 【Linux】理解系统中一个被打开的文件
  • k8s kubeadm部署安装详解
  • RT-DETR算法优化改进: 下采样系列 | 一种新颖的基于 Haar 小波的下采样HWD,有效涨点系列
  • CocosCreator3.8源码分析
  • (已解决)spingboot 后端发送QQ邮箱验证码
  • 【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题
  • 2024牛客寒假算法基础集训营1
  • 元素的显示与隐藏,精灵图,字体图标,CSSC三角