spark sql参数优化提高执行速度

  • 具体现象

    1. 内存CPU比例失调 一个Spark任务消耗 120(executor)*4G = 480G内存仅仅使用120个 core.几个SprakSQL任务就将整个系统资源吃光.
    2. 设置超过40个executor,但未指定分区数,导致多数executor空闲.
  • 原因分析

  • SparkSQL配置时Core与内存比例不恰当

  • 没有指定executor核心数

  • 未进行其他配置参数优化

  • 解决办法

    1. 在配置SparkSQL任务时指定executor核心数 建议为4
      (同一executor[进程]内内存共享,当数据倾斜时,使用相同核心数与内存量的两个任务,executor总量少的任务不容易OOM,因为单核心最大可用内存大.但是并非越大越好,因为单个exector最大core受服务器剩余core数量限制,过大的core数量可能导致资源分配不足)  
    2. 设置spark.default.parallelism=600 每个stage的默认task数量
      (计算公式为num-executors * executor-cores 系统默认值分区为40,这是导致executor并行度上不去的罪魁祸首,之所以这样计算是为了尽量避免计算最慢的task决定整个stage的时间,将其设置为总核心的2-3倍,让运行快的task可以继续领取任务计算直至全部任务计算完毕)
    3. 开启spark.sql.auto.repartition=true 自动重新分区
      (每个stage[阶段]运行时分区并不尽相同,使用此配置可优化计算后分区数,避免分区数过大导致单个分区数据量过少,每个task运算分区数据时时间过短,从而导致task频繁调度消耗过多时间)
    4. 设置spark.sql.shuffle.partitions=400 提高shuffle并行度
      (shuffle read task的并行度)
    5. 设置spark.shuffle.service.enabled=true 提升shuffle效率 --!并未测试
      (Executor 进程除了运行task 也要进行写shuffle 数据,当Executor进程任务过重时,导致GC不能为其他Executor提供shuffle数据时将会影响效率.此服务开启时代替Executor来抓取shuffle数据)
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark SQL性能优化提高Spark SQL查询速度效率的关键。下面是一些建议和技巧: 1. 数据分区和分桶:通过合理的数据分区和分桶,可以减少数据倾斜和提高查询性能。使用合适的列进行分区和分桶,可以使查询只针对特定的数据子集进行操作。 2. 数据压缩:使用适当的数据压缩方式可以减少数据存储和传输的成本,并提高查询性能。Spark SQL支持多种压缩格式,如Snappy、Gzip等。 3. 合理设置资源:根据集群规模和任务需求,合理设置Spark SQL的资源配置。包括executor内存、executor核数、并行度等参数的调整,可以根据具体情况进行优化。 4. 数据倾斜处理:数据倾斜是指某些数据分区的大小远远超过其他分区,导致任务执行时间变长。可以采用一些技术手段来解决数据倾斜问题,如使用随机前缀、增加分区、使用广播变量等。 5. 使用合适的数据格式:选择适合查询需求的数据格式可以提高查询性能。例如,Parquet格式支持谓词下推和列式存储,可以减少IO和提高查询速度。 6. 缓存和持久化:对于经常被重复查询的数据,可以使用Spark的缓存和持久化机制,将数据存储在内存或磁盘上,避免多次计算和IO操作。 7. SQL优化优化SQL查询语句,包括选择合适的连接方式、使用合适的索引、避免不必要的数据转换和计算等。 8. 资源监控和调优:通过Spark监控工具,如Spark UI、Ganglia等,可以实时监控任务的资源使用情况,及时发现和解决性能瓶颈。 综上所述,通过合理的数据分区和分桶、数据压缩、资源配置、数据倾斜处理、数据格式选择、缓存和持久化、SQL优化以及资源监控和调优等手段,可以有效提高Spark SQL的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值