Spark:性能调优实战

这篇具有很好参考价值的文章主要介绍了Spark:性能调优实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链接:

文字文档
极客链接

一、资源申请&并行度

spark.executor.cores

一个Executor中同时可以执行的task数目(在Executor内存不变的情况下,executor-cores数越大,平均下来一个task可以使用的内存就越少)

spark.executor.memory

Executor Java进程的堆内存大小,即Executor Java进程的Xmx值

spark.yarn.executor.memoryOverhead

Executor Java进程的off-heap内存,包括JVM overhead,sort、shuffle以及Netty的堆外内存等

spark.dynamicAllocation.enabled

是否开启动态资源分配,强烈建议开启。

spark.dynamicAllocation.maxExecutors

开启动态资源分配后,同一时刻,最多可申请的executor个数

spark.dynamicAllocation.minExecutors

开启动态资源分配后,某一时刻executor的最小个数。默认设置为3,即在任何时刻,作业都会保持至少有3个及以上的executor存活

spark.memory.fraction

存储+执行内存占节点总内存的大小 。

spark.memory.storageFraction

存储内存占(存储+执行)内存的比例

spark.driver.memory

driver使用内存大小

spark.yarn.driver.memoryOverhead

driver进程的off-heap内存

二、文件大小

spark.hadoop.hive.exec.orc.split.strategy

参数控制在读取ORC表时生成split的策略:

  • BI策略以文件为粒度进行split划分;

  • ETL策略会将文件进行切分,多个stripe组成一个split;

  • HYBRID策略当文件的平均大小大于hadoop最大split值(默认256M)时使用ETL策略,否则使用BI策略。
    由于读orc文件时默认按文件划分task(BI模式), 有数据倾斜的表(这里的数据倾斜指大量stripe存储于少数文件中)的情况并发可能不够, 影响执行效率. 可以改成ETL模式
    对于一些较大的ORC表,可能其footer较大,ETL策略可能会导致其从hdfs拉取大量的数据来切分split,甚至会导致driver端OOM,因此这类表的读取建议使用BI策略。

spark.hadoop.mapreduce.input.fileinputformat.split.minsize

计算Split划分时的minSize

spark.hadoop.mapreduce.input.fileinputformat.split.maxsize

控制在ORC切分时stripe的合并处理。具体逻辑是,当几个stripe的大小大于spark.hadoop.mapreduce.input.fileinputformat.split.maxsize时,会合并到一个task中处理。可以适当调小该值,如set spark.hadoop.mapreduce.input.fileinputformat.split.maxsize=134217728。以此增大读ORC表的并发。

spark.hadoopRDD.targetBytesInPartition

读取输入文件时&最终合并小文件时,每个task读取的数据量

spark.sql.adaptive.shuffle.targetPostShuffleInputSize

开启spark.sql.adaptive.enabled后,最后一个stage在进行动态合并partition时,会根据shuffle read的数据量除以该参数设置的值来计算合并后的partition数量。所以增大该参数值会减少partition数量,反之会增加partition数量。

spark.sql.mergeSmallFileSize

与 hive.merge.smallfiles.avgsize 类似,写入hdfs后小文件合并的阈值。如果生成的文件平均大小低于该参数配置,则额外启动一轮stage进行小文件的合并

spark.sql.targetBytesInPartitionWhenMerge

与hive.merge.size.per.task 类似,设置额外的合并job的map端输入size.

合并小文件时候,实际的map输入size=max(spark.sql.mergeSmallFileSize, spark.sql.targetBytesInPartitionWhenMerge , spark.hadoopRDD.targetBytesInPartition )

spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version

文件提交算法,MapReduce-4815 详细介绍了 fileoutputcommitter 的原理,version=2 是批量按照目录进行提交,version=1是一个个的按照文件提交。设置 version=2 可以极大的节省文件提交至hdfs的时间,减轻nn压力 。参考http://www.jasongj.com/spark/committer/

三、shuffle

spark.sql.shuffle.partitions

reduce阶段(shuffle read)的数据分区,分区数越多,启动的task越多,同时生成的文件数也会越多。

spark.sql.adaptive.enabled

是否开启调整partition功能,如果开启,spark.sql.shuffle.partitions设置的partition可能会被合并到一个reducer里运行。

spark.sql.adaptive.minNumPostShufflePartitions

开启spark.sql.adaptive.enabled后,合并之后最少会生成的分区数

spark.sql.adaptive.shuffle.targetPostShuffleInputSize

开启spark.sql.adaptive.enabled后,最后一个stage在进行动态合并partition时,会根据shuffle read的数据量除以该参数设置的值来计算合并后的partition数量。所以增大该参数值会减少partition数量,反之会增加partition数量。

spark.sql.adaptive.join.enabled

是否动态调整join算法

spark.sql.adaptiveBroadcastJoinThreshold

SortMergeJoin 转 BroadcastJoin 的阈值。

如果不设置该参数,该阈值与spark.sql.autoBroadcastJoinThreshold的值相等

 spark.sql.statistics.fallBackToHdfs

当表的文件大小元数据信息不可能用时回退到hdfs计算表的文件大小,从而决定是否使用map join. 分区表如果读入数据较少也不会优化为BroadcastJoin, 可以通过添加该参数优化:

spark.sql.adaptive.allowAdditionalShuffle

是否允许为了优化 Join 而增加 Shuffle。其默认值为 false

spark.sql.adaptive.skewedJoin.enabled

是否自动处理 Join 时数据倾斜 (根据前面stage的shuffle write信息操作来动态调整是使用sortMergeJoin还是broadcastJoin)

spark.sql.adaptive.skewedPartitionMaxSplits

处理一个倾斜 Partition 的 Task 个数上限,默认值为 5

spark.sql.adaptive.skewedPartitionRowCountThreshold

一个 Partition 被视为倾斜 Partition 的行数下限,也即行数低于该值的 Partition 不会被当作倾斜 Partition 处理。其默认值为 10L * 1000 * 1000 即一千万

spark.sql.adaptive.skewedPartitionSizeThreshold

一个 Partition 被视为倾斜 Partition 的大小下限,也即大小小于该值的 Partition 不会被视作倾斜 Partition。其默认值为 64 * 1024 * 1024 也即 64MB

spark.sql.adaptive.skewedPartitionFactor

倾斜因子。如果一个 Partition 的大小大于spark.sql.adaptive.skewedPartitionSizeThreshold的同时大于各 Partition 大小中位数与该因子的乘积,或者行数大于spark.sql.adaptive.skewedPartitionRowCountThreshold的同时大于各 Partition 行数中位数与该因子的乘积,则它会被视为倾斜的 Partition

spark.shuffle.service.enabled

启用外部shuffle服务,这个服务会安全地保存shuffle过程中,executor写的磁盘文件,因此executor即使挂掉也不要紧,必须配合spark.dynamicAllocation.enabled属性设置为true,才能生效,而且外部shuffle服务必须进行安装和启动,才能启用这个属性

spark.reducer.maxSizeInFlight

同一时刻一个reducer可以同时拉取的数据量大小

spark.reducer.maxReqsInFlight

同一时刻一个reducer可以同时产生的请求数

spark.reducer.maxBlocksInFlightPerAddress

同一时刻一个reducer向同一个上游executor最多可以拉取的数据块数

spark.shuffle.io.connectionTimeout

客户端超时时间,超过该时间会fetchfailed

spark.shuffle.io.maxRetries

shuffle read task从shuffle write task所在节点拉取属于自己的数据时,如果因为网络异常导致拉取失败,是会自动进行重试的。该参数就代表了可以重试的最大次数。如果在指定次数之内拉取还是没有成功,就可能会导致作业执行失败。

spark.shuffle.io.retryWait

每次重试的等待间隔:

spark.task.maxFailures

Task的最大重试次数

spark.reducer.maxReqSizeShuffleToMem

shuffle请求的文件块大小 超过这个参数值,就会被强行落盘,防止一大堆并发请求把内存占满。

四、广播mapjoin

spark.sql.autoBroadcastJoinThreshold

当执行join时,小表被广播的阈值。当被设置为-1,则禁用广播。表大小需要从 Hive Metastore 中获取统计信息。该参数设置的过大会对driver和executor都产生压力。

五、推测执行

spark.speculation

spark推测执行的开关,作用同hive的推测执行

spark.speculation.interval

开启推测执行后,每隔多久通过checkSpeculatableTasks方法检测是否有需要推测式执行的tasks文章来源地址https://www.toymoban.com/news/detail-853231.html

到了这里,关于Spark:性能调优实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据课程K2——Spark的RDD弹性分布式数据集

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解Spark的RDD结构; ⚪ 掌握Spark的RDD操作方法; ⚪ 掌握Spark的RDD常用变换方法、常用执行方法; 初学Spark时,把RDD看做是一个集合类型(类似于Array或List),用于存储数据和操作数据,但RDD和普通集合的区别

    2024年02月12日
    浏览(55)
  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(54)
  • 云计算与大数据第16章 分布式内存计算平台Spark习题

    1、Spark是Hadoop生态(  B  )组件的替代方案。 A. Hadoop     B. MapReduce        C. Yarn             D.HDFS 2、以下(  D  )不是Spark的主要组件。 A. Driver      B. SparkContext       C. ClusterManager D. ResourceManager 3、Spark中的Executor是(  A  )。 A.执行器      B.主节

    2024年02月14日
    浏览(119)
  • 分布式计算框架:Spark、Dask、Ray 分布式计算哪家强:Spark、Dask、Ray

    目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展, 有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成

    2024年02月11日
    浏览(70)
  • 数据存储和分布式计算的实际应用:如何使用Spark和Flink进行数据处理和分析

    作为一名人工智能专家,程序员和软件架构师,我经常涉及到数据处理和分析。在当前大数据和云计算的时代,分布式计算已经成为了一个重要的技术方向。Spark和Flink是当前比较流行的分布式计算框架,它们提供了强大的分布式计算和数据分析功能,为数据处理和分析提供了

    2024年02月16日
    浏览(62)
  • Spark:性能调优实战

    链接: 文字文档 极客链接 一、资源申请并行度 一个Executor中同时可以执行的task数目(在Executor内存不变的情况下,executor-cores数越大,平均下来一个task可以使用的内存就越少) Executor Java进程的堆内存大小,即Executor Java进程的Xmx值 Executor Java进程的off-heap内存,包括JVM over

    2024年04月16日
    浏览(44)
  • Spark单机伪分布式环境搭建、完全分布式环境搭建、Spark-on-yarn模式搭建

    搭建Spark需要先配置好scala环境。三种Spark环境搭建互不关联,都是从零开始搭建。 如果将文章中的配置文件修改内容复制粘贴的话,所有配置文件添加的内容后面的注释记得删除,可能会报错。保险一点删除最好。 上传安装包解压并重命名 rz上传 如果没有安装rz可以使用命

    2024年02月06日
    浏览(83)
  • 【Spark分布式内存计算框架——Spark 基础环境】1. Spark框架概述

    第一章 说明 整个Spark 框架分为如下7个部分,总的来说分为Spark 基础环境、Spark 离线分析和Spark实时分析三个大的方面,如下图所示: 第一方面、Spark 基础环境 主要讲述Spark框架安装部署及开发运行,如何在本地模式和集群模式运行,使用spark-shell及IDEA开发应用程序,测试及

    2024年02月11日
    浏览(67)
  • spark分布式解压工具

    ​ spark解压缩工具,目前支持tar、gz、zip、bz2、7z压缩格式,默认解压到当前路下,也支持自定义的解压输出路径。另外支持多种提交模式,进行解压任务,可通过自定义配置文件,作为spark任务的资源设定 2.1 使用hadoop的FileSystem类,对tos文件的进行读取、查找、写入等操作

    2024年02月02日
    浏览(48)
  • Spark分布式内存计算框架

    目录 一、Spark简介 (一)定义 (二)Spark和MapReduce区别 (三)Spark历史 (四)Spark特点 二、Spark生态系统 三、Spark运行架构 (一)基本概念 (二)架构设计 (三)Spark运行基本流程 四、Spark编程模型 (一)核心数据结构RDD (二)RDD上的操作 (三)RDD的特性 (四)RDD 的持

    2024年02月04日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包