偏好配置化spark参数设置

本文主要探讨了如何针对不同需求配置Spark参数,包括任务资源配置、executor内存分配、shuffle管理及超时设置,以优化性能和避免错误。通过合理设置driver-memory、num-executors、executor-memory等参数,以及调整shuffle相关参数,可以有效地提升Spark作业的效率和稳定性。

背景:偏好种类过多,每次创建、完善画像hql工作量巨大。为了解决此问题,将hql配置化生成,并且使用spark运行。

由于不同的偏好量不同,脚本动态分配资源,直接上代码!

脚本:sh /....../prefer_res_normal.sh 参数1 参数2 21840 (21840约等于偏好M数,必须为840的倍数)

#!/bin/bash
partitions=`expr ${3} / 140`
numexe=`expr ${3} / 840`

--master yarn \

--driver-memory 4G \
--driver-cores 1 \

--num-executors ${numexe} \
--executor-memory 12G \
--executor-cores 2 \

--conf spark.default.parallelism=${partitions} \

--conf spark.sql.shuffle.partitions=${partitions} \

--conf spark.storage.memoryFraction=0.5 \
--conf spark.shuffle.memoryFraction=0.3 \

--conf spark.shuffle.io.maxRetries=30 \
--conf spark.shuffle.io.retryWait=30s \

--conf spark.network.timeout=300 \

--conf spark.reducer.maxSizeInFlight=96m \

--conf spark.shuffle.sort.bypassMergeThreshold=1000 \

--conf spark.executor.logs.rolling.maxRetainedFiles=5 \

改了三个hive参数
hive.metastore.connect.retries=6 
hive.metastore.failure.retries=3 
hive.metastore.client.connect.retry.delay=30s

参数所解决的问题

一、任务资源配置(资源相关参数)

  • driver-memory:driver负责申请资源、调度和执行代码,一般情况不用设置很大。
  • num-executors:设置作业共要用多少个Executor进程来执行。

  • executor-memory:每个Executor进程的内存。Executor内存的大小,很多时候直接决定了spark作业的性能,而且和JVM OOM异常有直接的关联。根据作业情况和实际情况来定,num-execotors*executor-memory就是这个作业占用的资源量。

  • executor-cores:设置每个Executor进程的CPU core数量,决定了进程并行执行task线程的能力。num-executors*executor-cores是并行的个数,一般并行个数为1/3~1/2合适。

  • spark.sql.shuffle.partitions:设置shuffle分区数(并行度),默认为200,数据量太大的时候,可根据实际情况调大,避免shuffle过程报错。

  • spark.default.parallelism(只对HashPartitioner有效):设置每个stage的task数量。不设置可能会影响spark作业性能。一般为CPU core数量的2~3倍合适。

二、executor的内存分配占比(资源相关参数)

executor的内存分为三部分,第一块是让task执行编写的代码,默认20%,第二块是shuffle,默认20%,第三块是RDD持久化,默认60%。

  • spark.storage.memoryFraction:默认0.6,如果spark作业中有较多的持久化操作,可以适当提高。
  • spark.shuffle.memoryFraction:默认0.2,如果spark作业中持久化较少,shuffle操作过多时,建议降低持久化操作的占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能。

三、spark ShuffleManager(shuffle过程相关参数)

spark 1.2以前是HashShuffleManager,1.2之后是SortShuffleManager。

HashShuffleManager存在一个弊端就是会产生大量的磁盘文件,进而影响了IO性能。不过会有一个参数可以开启HashShuffleManager的优化,spark.shuffle.consolidateFiles=true,默认值是false。优化前后的文件数量会有一定程度的减少。
假设当前有10个executor,每个executor5个task,下游100个task
优化前的磁盘文件个数:5*10*100
优化后的磁盘文件个数:1*10*100
即使是优化后,磁盘文件个数也会有很多,因此建议使用SortShuffleManager。
SortShuffleManager有两种运行机制 :1、普通机制,2、bypass运行机制。shuffle read task的数量小于 等于spark.shuffle.sort.bypassMergeThreshold默认值200值,会启用bypass机制,建议调大,原因如下:

  • 普通机制:数据先写入内存数据结构,根据不同的shuffle算子,选用不同的数据结构。聚合是map,一遍聚合一边写入,join是array,直接写入内存。SortShuffleManager有一个磁盘文件merge的过程,当前有多少个task,就有多少个磁盘文件。
  • bypass:1、磁盘写机制不同,2、不进行排序(重点)。

集群使用的版本大于1.2,所以可以忽略文件数量太多的问题。

四、spark shuffle连接超时(shuffle过程相关参数)

  • spark.shuffle.io.maxRetries:默认值3,shuffle过程拉取数据时,因为网络异常导致拉取失败,会自动进行重试。该参数是重试的最大次数,如果在指定次数内还没成功,就导致作业执行失败。对于那些包含了特别耗时的shuffle操作的作业,建议增大次数,避免由于JVM的full gc或者网络不稳定因素导致的拉取数据失败。提高稳定性必调参数。

  • spark.shuffle.io.retryWait:默认值5s,具体解释如上,代表了每次重试拉取数据的等待间隔,默认5s。

  • spark.network.timeout:默认值120(120s),配置所有网络的传输延时

五、网络IO次数(shuffle过程相关参数)

  • spark.shuffle.file.buffer:默认值32k,将数据写到磁盘文件之前,会先写入buffer缓冲中,待缓冲写满之后,才会写到磁盘。资源充足 的情况下可以适当调大该参数,从而减少IO次数,进而提升性能。

  • spark.reducer.maxSizeInFlight:默认48m,shuffle read task的buffer缓冲大小,这个buffer决定了每次能够拉取多少数据。资源充足可适当调大,提高性能。

六、连接hive元数据超时(hive-site.xml)

  • hive.metastore.connect.retries=6 ,连接hive元数据重试次数。(默认值在hive-site.xml可见)
  • hive.metastore.failure.retries=3,连接hive元数据失败重试次数。
  • hive.metastore.client.connect.retry.delay=30s,重新连接元数据的等待间隔。

 

Apache DolphinScheduler是一个新一代分布式大数据工作流任务调度系统,致力于“解决大数据任务之间错综复杂的依赖关系,整个数据处理开箱即用”。它以 DAG(有向无环图) 的方式将任务连接起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及 Kill任务等操作。目前已经有像IBM、腾讯、美团、360等400多家公司生产上使用。 调度系统现在市面上的调度系统那么多,比如老牌的Airflow, Oozie,Kettle,xxl-job ,Spring Batch等等, 为什么要选DolphinScheduler ? DolphinScheduler 的定位是大数据工作流调度。通过把大数据和工作流做了重点标注. 从而可以知道DolphinScheduler的定位是针对于大数据体系。 DolphinScheduler是非常强大的大数据调度工具,有以下一些特点:1、通过拖拽以DAG 图的方式将 Task 按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态;2、支持丰富的任务类型;3、支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill 任务等操作;4、支持工作流全局参数及节点自定义参数设置;5、支持集群HA,通过 Zookeeper实现 Master 集群和 Worker 集群去中心化;6、支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计;7、支持补数,并行或串行回填数据。课程会带大家构建DolphinScheduler大数据调度平台,实战讲解多种任务调度配置,会基于案例讲解DolphinScheduler使用,让大家在实战中掌握DolphinScheduler。 DolphinScheduler 发展很快 很多公司调度都切换到了DolphinScheduler,掌握DolphinScheduler调度使用势在必行,抓住新技术机遇,为跳巢涨薪做好准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值