spark调优

1.代码调优:

  1. 避免创建重复的RDD
  2. 复用同一个RDD
  3. 对多次使用的RDD进行持久化
  4. 如何选择一种最合适的持久化策略呢?
  5. 答: cache--MEMORY_ONLY;  persist:MEMORY_ONLY,MEMORY_ONLY_SER,MEMORY_AND_DISK_SER
  6. checkpoint:如果一个RDD的计算时间比较长或者计算起来比较复杂。一般将这个RDD的计算结果保存到HDFS上,这样数据会更加安全。如果一个RDD的依赖关系非常长,也会使用checkpoint,切断依赖关系,提高容错的效率。
  7. 避免使用shuffle类的算子
  8. 可以使用广播变量+filter,广播变量+map,广播变量+flatMap 来替换join算子
  9. 使用map-side预聚合的shuffle类算子:如reduceByKey. aggregateByKey  combineByKey
  10. 尽量使用高性能的算子: 使用reduceByKey 替代  groupByKey 使用mapPartition替代map 使用foreachPartition替代foreach 。filter后使用coalesce减少分区
  11. 使用 Kryo优化序列化性 Sparkconf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer").registerKryoClasses(new Class[]{SpeedSortKey.class})
  12. 数据本地化的级别:PROCESS_LOCAL:task计算的数据在本进程(executor)的内存中。NODE_LOCAL:task所计算的数据在本节点所在的磁盘上,或者task所计算的数据在本节点其他executor进行的内存中。NO_PREF:task所计算的:数据在关系型数据库中。RACK_LOCAL:task所计算的数据在同机架的不同节点的磁盘或者executor进进程的内存中。Any:跨机架。

    Spark中任务调度时,TaskScheduler在分发之前需要依据数据的位置来分发,最好将task分发到数据所在的节点上,如果TaskScheduler分发的task在默认3s依然无法执行的话,TaskScheduler会重新发送这个task到相同的Executor中去执行,会重试5次,如果依然无法执行,那么TaskScheduler会降低一级数据本地化的级别再次发送task。

    如上图中,会先尝试1,PROCESS_LOCAL数据本地化级别,如果重试5次每次等待3s,会默认这个Executor计算资源满了,那么会降低一级数据本地化级别到2,NODE_LOCAL,如果还是重试5次每次等待3s还是失败,那么还是会降低一级数据本地化级别到3,RACK_LOCAL。这样数据就会有网络传输,降低了执行效率。如何提高数据本地化的级别?答:可以增加每次发送task的等待时间(默认都是3s),将3s倍数调大。具体的一些参数名: spark.locality.wait ; spark.locality.wait.process(针对PROCESS_LOCAL级别); spark.locality.wait.node(针对NODE_LOCAL级别);  spark.locality.wait.rack(针对RACK_LOCAL级别)

    13. spark shuffle调优

                buffer大小; shuffle read拉取数据量的大小; shuffle聚合内存的比例; 拉取数据重试的次数;

                重试间隔时间; spark shuffle的种类;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark调优参数是为了提高Spark应用程序的性能和效率。使用适当的参数可以优化任务的执行,提升Spark集群的吞吐量和响应时间。 一些常见的Spark调优参数包括: 1. spark.executor.memory:指定每个Executor的内存大小,默认为1g。可以根据任务的需求和集群的硬件配置来调整这个参数。 2. spark.executor.cores:指定每个Executor的核心数,默认为1。可以根据任务对CPU资源的需求来调整这个参数。 3. spark.driver.memory:指定Driver程序使用的内存大小,默认为1g。如果Driver程序运行较大的任务或需要处理大量数据,可以适当增加这个参数。 4. spark.default.parallelism:指定RDD默认的分区数,默认值为当前集群的可用核心数。根据数据量和计算资源来调整这个参数,以优化任务的并行度。 5. spark.shuffle.service.enabled:指定是否启用独立的Shuffle服务,默认为false。如果集群的Master节点性能较弱,建议启用该服务以减轻Master节点的压力。 6. spark.sql.shuffle.partitions:指定SQL查询中Shuffle操作的并行度,默认值为200。可以根据数据规模和硬件配置来调整这个参数,以提高Shuffle操作的效率。 7. spark.network.timeout:指定网络超时的时间,默认为120s。如果集群中有较慢的网络连接或任务需要处理大量数据,可以适当增加这个参数。 调优参数需要根据具体的任务和集群进行调整,通过合理配置这些参数可以提高Spark应用程序的性能和效率,加快数据处理的速度,减少任务的执行时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值