spark性能优化点(超详解!!!珍藏版!!!)

本文详细探讨了Spark性能优化的各个方面,包括增加资源分配、提高并行度、RDD的重用与持久化、广播变量的运用以及序列化优化。通过调整executor的内存、CPU核心数、task数量和资源分配策略,可以显著提升Spark作业的性能。同时,使用Kryo序列化和fastutil优化数据格式,以及调整数据本地化等待时长,也能有效改善运行效率。通过对JVM的调优,特别是降低cache操作的内存占比,可以避免频繁的垃圾回收,提高整体运行速度。
摘要由CSDN通过智能技术生成

spark性能优化点

  1. 分配更多的资源
    1.1 分配哪些资源
    1.2 在哪里可以设置这些资源
    1.3 参数调节到多大,算是最大
    分配更多的资源:
    它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的,
    基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调
    优的时候,首先第一步,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到
    了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。
    相关问题:
    (1)分配哪些资源?
    (2)在哪里可以设置这些资源?
    (3)剖析为什么分配这些资源之后,性能可以得到提升?
    executor‐memory、executor‐cores、driver‐memory
    在实际的生产环境中,提交spark任务时,使用spark‐submit shell脚本,在里面调整对应的参数。
    提交任务的脚本:
    spark‐submit
    ‐‐master spark://node1:7077
    ‐‐class cn.itcast.WordCount
    ‐‐num‐executors 3 \ 配置executor的数量
    ‐‐driver‐memory 1g \ 配置driver的内存(影响不大)
    ‐‐executor‐memory 1g \ 配置每一个executor的内存大小
    ‐‐executor‐cores 3 \ 配置每一个executor的cpu个数
    /export/servers/wordcount.jar
    1.4 为什么调大资源以后性能可以提升
  2. 提高并行度
    2.1 Spark的并行度指的是什么
    第一种情况:standalone模式
    先计算出公司spark集群上的所有资源 每台节点的内存大小和cpu核数,
    比如:一共有20台worker节点,每台节点8g内存,10个cpu。
    实际任务在给定资源的时候,可以给20个executor、每个executor的内存8g、每个executor的使用的cpu个数
    10。
    第二种情况:Yarn
    先计算出yarn集群的所有大小,比如一共500g内存,100个cpu;
    这个时候可以分配的最大资源,比如给定50个executor、每个executor的内存大小10g,每个executor使用的cpu
    个数为2。
    使用原则:你能使用的资源有多大,就尽量去调节到最大的大小(executor的数量:几十个到上百个不等;executor的
    内存;exector的cpu个数)
    2.2 如何提高并行度
    2.2.1 可以设置task的数量
    2.2.2 如何设置task数量来提高并行度
    2.2.3 给RDD重新设置partition的数量
    spark作业中,各个stage的task的数量,也就代表了spark作业在各个阶段stage的并行度!
    当分配完所能分配的最大资源了,然后对应资源去调节程序的并行度,如果并行度没有与资源相匹配,那么导致你
    分配下去的资源都浪费掉了。同时并行运行,还可以让每个task要处理的数量变少(很简单的原理。合理设置并行度,
    可以充分利用集群资源,减少每个task处理数据量,而增加性能加快运行速度。)
    举例说明:
    假如, 现在已经在spark‐submit 脚本里面,给我们的spark作业分配了足够多的资源,比如50个executor ,每
    个executor 有10G内存,每个executor有3个cpu core 。 基本已经达到了spark集群或者yarn集群上限。task没有
    设置,或者设置的很少,比如就设置了100个task、50个executor、每个executor有3个core ,也就是说
    Application 任何一个stage运行的时候,都有总数150个cpu core ,可以并行运行。
    但是你现在只有100个task,平均分配一下,每个executor 分配到2个task,那么同时在运行的task,只有100个
    task,每个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数据。
    至少设置成与spark Application 的总cpu core 数量相同(最理想情况,150个core,分配150task,一起运
    行,差不多同一时间运行完毕)官方推荐,task数量,设置成spark Application 总cpu core数量的2~3倍 。
    比如150个cpu core ,基本设置task数量为300~500. 与理想情况不同的,有些task会运行快一点,比如50s就完
    了,有些task 可能会慢一点,要一分半才运行完,所以如果你的task数量,刚好设置的跟cpu core 数量相同,可能会
    导致资源的浪费。
    因为比如150个task中10个先运行完了,剩余140个还在运行,但是这个时候,就有10个cpu core空闲出来了,导
    致浪费。如果设置2~3倍,那么一个task运行完以后,另外一个task马上补上来,尽量让cpu core不要空闲。同时尽量
    提升spark运行效率和速度。提升性能。
    设置参数spark.defalut.pa
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark Streaming是基于Spark核心引擎的流处理框架,它将实时数据流分成小批次进行处理,每个批次都可以像RDD一样进行处理。Spark Streaming的架构原理主要包括以下几个方面: 1. 数据源:Spark Streaming支持多种数据源,包括Kafka、Flume、Twitter、HDFS等,用户可以根据自己的需求选择合适的数据源。 2. 数据接收器:Spark Streaming通过数据接收器从数据源中获取数据,并将数据分成小批次进行处理。数据接收器可以是Spark自带的接收器,也可以是自定义的接收器。 3. 数据处理:Spark Streaming将每个批次的数据转换成RDD,然后通过Spark的转换操作进行处理。用户可以使用Spark提供的各种转换操作,如map、filter、reduce等。 4. 数据输出:Spark Streaming支持多种数据输出方式,包括HDFS、数据库、Kafka等。用户可以根据自己的需求选择合适的输出方式。 5. 容错性:Spark Streaming具有高度的容错性,它可以在节故障或数据丢失的情况下自动恢复,并保证数据处理的准确性和完整性。 总之,Spark Streaming的架构原理是基于Spark核心引擎的流处理框架,它通过数据源、数据接收器、数据处理和数据输出等组件实现实时数据流的处理和分析。 ### 回答2: Spark Streaming是Spark的一种实时数据处理框架,它可以在Spark的强大计算引擎上,实现对实时数据流的高效处理和分析。Spark Streaming的架构原理包括以下几个部分: 1. 数据输入层:Spark Streaming的数据输入来源可以是各种数据源,例如Kafka、Flume、HDFS、socket等。在Spark Streaming中,输入的数据流被称为DStream(Discretized Stream),它是一系列连续的RDD(Resilient Distributed Datasets)。 2. 数据处理层:DStream作为Spark Streaming的基本数据结构,可以使用Spark强大的RDD操作函数进行处理。例如map、reduce、join等。Spark Streaming支持的RDD操作函数都可以被应用到DStream上,因此可以实现强大和灵活的数据处理和分析。 3. 数据输出层:在数据处理完成后,Spark Streaming提供了多种数据输出方式,例如将数据存储在HDFS、将数据发送到Kafka或Flume等消息系统、将数据推送到Web UI或Dashboards等。用户可以根据自己的需求选择合适的输出方式。 4. 容错性和可伸缩性:Spark Streaming具有良好的容错性和可伸缩性,它可以在集群中进行分布式计算和分布式存储,并保证数据计算和处理的完整性。 总的来说,Spark Streaming的架构原理基于Spark强大的计算和分布式处理引擎,实现了对实时数据流的高效处理和分析。以应对大数据时对实时业务处理和分析的需求。 ### 回答3: Spark Streaming架构原理是基于Spark的批处理引擎和Spark执行引擎基础上,实现了流式处理。其原理是将连续不断的数据流按照一定的时间间隔划分成批处理的数据流,将批数据流转化为RDD,再通过Spark执行引擎进行处理计算。 Spark Streaming架构包含以下组件: 1.数据输入源:包括数据输入流的来源,如Kafka、Flume、HDFS、Socket等。 2.输入DStream:对输入数据流进行封装,存储在内存中,以RDD形式进行处理。 3.数据处理引擎:处理包括数据转换、过滤、聚合等操作,使用Spark的高度并行化和内存计算能力。 4.处理结果输出:将处理结果输出到外部存储系统,如HDFS、数据库等。 在Spark Streaming的具体实现过程中,有以下三个重要的概念: 1.数据流窗口:指的是对输入的数据按照一定的时间间隔进行划分,把一段时间内的数据封装成一个小的包进行处理。可以设置窗口的大小和滑动间隔。 2.离散化流:将输入的数据流通过DStream划分成一系列的离散化的RDD,每个RDD包含窗口中一段时间内的数据。 3.转换操作:对离散化流中每个RDD进行转换操作,包括map、filter、reduce、join等操作,完成对数据流的处理。 在使用Spark Streaming架构进行数据流处理的时候,需要注意以下几: 1.数据处理设计应该具备时效性和高可用性,尽可能减少延迟时间。 2.需要合理设置RDD缓存机制,避免数据丢失。 3.考虑到复杂的计算可能会使内存存储溢出,需要合理设置批处理的大小。 总的来说,Spark Streaming架构是一种基于Spark的流式数据处理框架。其实现原理是通过将流式数据划分为小的批处理进行离散化和转换,再结合Spark的高并发执行引擎实现对数据流的高速、时效性处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值