`

增加spark 并行度方式

 
阅读更多
1 Spark Streaming增大任务并发度
Q: 在Spark Streaming中,增大任务并发度的方法有哪些?
A:s1 core的个数: task线程数,也就是--executor-cores
      s2 repartition
      s3 Streaming + Kafka,Direct方式,则增加partition分区数
      s4 Streaming + Kafka,Receiver方式,则增加Receiver个数
      s5 reduceByKey和reduceByKeyAndWindow传入第二个参数



1 Spark Streaming增大任务并发度
Q: 在Spark Streaming中,增大任务并发度的方法有哪些?
A:s1 core的个数: task线程数,也就是--executor-cores
      s2 repartition
      s3 Streaming + Kafka,Direct方式,则增加partition分区数
      s4 Streaming + Kafka,Receiver方式,则增加Receiver个数
      s5 reduceByKey和reduceByKeyAndWindow传入第二个参数

1.1 解析

s1 & s2:
RDD在计算的时候,每个分区都会起一个task,所以RDD的分区数目决定了总的task数据。
申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。
e g:
RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。
如果计算资源不变,你有101个task的话,就需要6个轮次,在最后一轮中,只有一个task在执行,其余核都在空转。
如果资源不变,你的RDD只有两个分区,那么同一时刻只有2个task运行,其余18个核空转,造成资源浪费。
这就是在Spark调优中,通过增大RDD分区数目,进而增大任务并行度的做法。

s5:
如果在计算的任何stage中使用的并行task的数量没有足够多,那么集群资源是无法被充分利用的。举例来说,对于分布式的reduce操作,比如reduceByKey和reduceByKeyAndWindow,默认的并行task的数量是由spark.default.parallelism参数决定的。你可以在reduceByKey等操作中,传入第二个参数,手动指定该操作的并行度,也可以调节全局的spark.default.parallelism参数。

1.2 增大kafka中的partition可以增加Spark在处理数据上的并行度吗?

s4:
在Receiver的方式中,Spark中的partition和Kafka中的partition并不是相关的,所以如果我们加大每个topic的partition数量,仅仅是增加线程来处理由单一Receiver消费的主题。但是这并没有增加Spark在处理数据上的并行度。但是,该方式下,一个Receiver就对应于一个partition,所以,可以通过增加Receiver的个数来增大Spark任务并行度。

s3:
而在Direct方式中,Kafka中的partition与RDD中的partition是一一对应的并行读取Kafka数据,这种映射关系也更利于理解和优化。

Level of Parallelism。指定它以后,在进行reduce类型操作的时候,默认partition的数量就被指定了。这个参数在实际工程中通常是必不可少的,一般都要根据input和每个executor内存的大小来确定。设置level of parallelism或者属性spark.default.parallelism来改变并行级别,通常来说,每一个CPU核可以分配2~3个task



并行度就是Spark作业中,各个stage的task数量,也就代表了Spark作业的在各个阶段(stage)的并行度。
如果不调节并行度,导致并行度过低,会怎么样?
假设,现在已经在spark-submit脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu
core。基本已经达到了集群或者yarn队列的资源上限。
task没有设置,或者设置的很少,比如就设置了,100个task。50个executor,每个executor有3个cpu core,也就是说,你的Application任何一个stage运行的时候,都有总数在150个cpu
core,可以并行运行。但是你现在,只有100个task,平均分配一下,每个executor分配到2个task,ok,那么同时在运行的task,只有100个,每个executor只会并行运行2个task。每个executor剩下的一个cpu core,就浪费掉了。

合理的并行度的设置,应该是要设置的足够大,大到可以完全合理的利用你的集群资源;比如上面的例子,总共集群有150个cpu core,可以并行运行150个task。那么就应该将你的Application的并行度,至少设置成150,才能完全有效的利用你的集群资源,让150个task,并行执行;而且task增加到150个以后,即可以同时并行运行,还可以让每个task要处理的数据量变少;比如总共150G的数据要处理,如果是100个task,每个task计算1.5G的数据;现在增加到150个task,可以并行运行,而且每个task主要处理1G的数据就可以。


1、task数量,至少设置成与Spark application的总cpu core数量相同(最理想情况,比如总共150个cpu core,分配了150个task,一起运行,差不多同一时间运行完毕)。

2、官方是推荐,task数量,设置成spark application总cpu core数量的2~3倍,比如150个cpu core,基本要设置task数量为300~500。
分享到:
评论

相关推荐

    2.调整并行度分散同一个Task的不同Key

    默认情况下,`groupByKey`操作的并行度会使用Spark的默认并行度设置,但在这个例子中,我们将手动指定不同的并行度值来观察其效果。 ##### 3.1 增加并行度 首先尝试增加并行度,将Shuffle并行度从12增加到17。通过...

    spark性能调优文档

    Spark性能调优是提高大数据处理效率的关键步骤,尤其在处理大规模数据时,高效的资源配置和并行度设置至关重要。本文将详细解析如何通过分配更多资源和提高并行度来优化Spark作业的性能。 **1. 分配更多的资源** ...

    spark个人总结.doc

    增加并行度可以更充分地利用集群资源,同时减少每个任务处理的数据量,从而提高Spark作业的整体性能。 1. **设置任务数量**: - 基本原则是任务数量至少等于Spark应用的总CPU核心数。 - 官方建议将任务数量设置为...

    基于CDH 6.3.0 搭建 Hive on Spark 及相关配置和调优

    - 可以通过设置`spark.sql.shuffle.partitions`等参数手动调整并行度,确保数据均匀分布,减少数据倾斜。 #### 总结 通过以上配置和调优步骤,可以显著提升Hive on Spark的性能,实现更快的数据处理速度。在实践中...

    SparkCore源码阅读

    Apache Spark 是一个用于大规模数据处理的开源计算系统,其核心模块 Spark Core 提供了基础的并行计算框架和分布式部署方式的支持。本文主要关注 Spark 的部署方式,包括 Standalone、Spark on Mesos 和 Spark on ...

    spark 优化

    并行度是指Spark作业中各Stage的任务数量,代表了Spark作业在不同阶段的并行处理能力。 **1.2.2 如果不调节并行度,导致并行度过低会怎样?** 假设已分配足够资源,但并行度设置过低,会导致部分资源闲置。例如,...

    Spark调优1

    在Spark应用的性能优化中,关键在于合理分配和利用资源,以及调整作业的并行度。以下将详细阐述这两个方面。 1、性能调优 1.1、分配更多资源 1.1.1、分配资源:在Spark中,需要关注的主要资源包括Executor的数量...

    Spark性能调优和数据倾斜解决方案

    本文将深入探讨Spark性能调优的关键技术和方法,特别是在资源分配、并行度调节等方面的具体实践策略,并针对数据倾斜这一常见问题提供全面的解决方案。 #### 二、资源分配优化 资源的有效分配是Spark性能调优的第一...

    Spark Configuration - Spark 1.6.2

    应用属性主要是指那些定义了Spark应用程序行为的参数,如并行度、内存大小等。 6. 运行时环境 运行时环境涉及执行环境的配置,如JVM堆大小、垃圾回收策略等。 7. Shuffle行为 Shuffle是分布式计算中的一个过程,...

    Spark大数据企业级实战版_带目录

    Spark的性能优化涉及内存管理、数据序列化、并行度调整等多个方面。例如,可以通过增加executor内存、调整executor数量和核心数来提升性能。此外,理解Spark的存储级别和广播变量也是优化的关键。 七、实际案例 书...

    spark替代Hive实现ETL作业

    - 调整`spark.sql.shuffle.partitions`参数,根据实际情况动态设置shuffle并行度。 - 针对小文件问题,利用Spark 2.0版本中的小文件合并功能,减少小文件的数量,减轻Driver的压力。 - 调整UI相关的参数,如`...

    spark-2.3.0-bin-hadoop2.7版本.zip

    Spark是Apache软件基金会下的一个开源大数据处理框架,其2.3.0版本是该框架的一个稳定版本,提供...这个版本的Spark不仅在核心功能上有所强化,还在组件的丰富度和易用性上做了诸多优化,是大数据处理领域的重要工具。

    spark性能调优参数总结

    除了Shuffle相关参数,Spark还提供了许多其他性能调优参数,如内存管理、序列化、并行度等,它们共同构成了Spark强大的性能调优体系。在进行性能调优时,应综合考虑任务特点、集群资源和硬件环境,通过合理配置相关...

    Spark性能优化基础篇

    1. **调整executor数量和内存**:增加executor数量可以提高并行度,但会消耗更多资源。适当增大executor内存可以减少溢写磁盘的次数,提升性能,但也要考虑集群的整体资源分配。 2. **设置合适的task并发度**:每个...

    spark-core_2.11-1.6.1.zip

    通过SparkContext,你可以创建RDD,设置配置参数,如存储级别和并行度,以及启动计算。 在Spark 1.6.1版本中,还包含了对DataFrame的支持,DataFrame是Spark SQL的一部分,它提供了一种高效且灵活的方式来处理结构...

    Spark性能优化指南.pdf

    适当增加并行度可以充分利用集群资源,减少等待时间。 ### 二、进阶篇:数据倾斜调优与Shuffle调优 #### 2. 数据倾斜调优 数据倾斜是指数据在分区间的分布不均匀,导致某些分区处理数据量远大于其他分区。这种...

    Spark跨集群bulk load(6-2)

    - **分块传输**:将大数据文件拆分成小块进行传输,减少单个文件的大小,有利于提高传输效率和并行度。 - **压缩数据**:在传输前对数据进行压缩,可以显著减少网络负载。 - **异步加载**:在目标集群上,可以采用...

    Spark 调优 在 facebook 的实践

    - 调整并行度,平衡任务负载。 #### 工具支持 - **工具**: Facebook开发了一系列工具帮助进行Spark性能监控与优化。 - **功能**: - 实时监控集群状态,及时发现性能瓶颈。 - 自动生成调优建议,辅助决策制定。 ...

Global site tag (gtag.js) - Google Analytics