SparkSQL并行度参数设置方法

本文介绍了如何调整SparkSQL的并行度以优化性能。默认并行度为200,可通过代码配置或提交参数来调整。代码配置优先级高于提交参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:未经允许,随意转载,请附上本文链接谢谢(づ ̄3 ̄)づ╭❤~
https://blog.youkuaiyun.com/xiaoduan_/article/details/79809262

SparkSQL并行度参数设置方法

SparkSQL并行度是SparkSQL的第一个调优点,默认的并行度是200,需要根据实际情况进行设置,它有有两种设置方法,
1. 在代码中直接设定

val spark = SparkSession.builder()
      .config("spark.sql.shuffle.partitions",100)//设置并行度100
      .getOrCreate()
  1. 在提交的时候提供参数修改,注意 代码中的优先级高于提交时的优先级
    这里是一个例子
./bin/spark-submit \
--class com.imooc.log.TopNStatJobYARN \
--name TopNStatJobYARN \
--master yarn \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
/home/hadoop/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/imooc/clean 20170511 
### 如何在Spark SQL中优化并行度设置 #### 1. 利用自适应查询执行 (AQE) 自适应查询执行(AQE)是 Spark SQL 提供的一项重要特性,能够动态调整 shuffle 后的分区数量。此功能从 Apache Spark 3.2.0 版本开始默认启用,并允许通过 `spark.sql.adaptive.enabled` 配置项控制其开关状态[^3]。当 AQE 开启时,Spark 可以基于实际的数据分布情况,在运行时决定最优的分区数,从而有效提升并行度。 #### 2. 设置 Shuffle 分区数 对于 Spark SQL 来说,默认情况下 shuffle 过程中的分区数由参数 `spark.sql.shuffle.partitions` 控制。该参数决定了数 shuffle 操作所使用的分区数目。通常建议将其值设为集群资源和数据规模相匹配的一个合理数值,比如 200 或更高。需要注意的是,过高的分区数可能会增加调度开销,而过低则可能导致任务集中度过高,影响性能[^4]。 #### 3. 数据预处理与分片策略 为了进一步提高读取阶段的并行度,可以考虑对底层存储文件进行合理的切分。例如,HDFS 文件小应尽量接近 HDFS 块小(通常是 128MB),这样可以让每个 block 对应一个独立的任务单元。此外,还可以尝试使用更高效的压缩格式(如 Parquet 或 ORC),这些列式存储格式不仅支持更高的压缩率,还提供了更好的谓词下推能力,减少不必要的 I/O 消耗[^5]。 #### 4. 手动干预 Partition 数量 尽管 Spark SQL 会依据 Hive 表关联的 HDFS blocks 自动生成初始 stage 的 partitioning 方案,但在某些特定场景下可能仍需手动介入调整。例如,借助 `REPARTITION()` 函数显式改变 DataFrame/RDD 的分区布局;或者针对 key-value 类型的操作符(如 reduceByKey),直接指定目标 partitions 参数来实现细粒度调控[^4]。 ```sql -- 使用 REPARTITION() 方法重定义分区数 SELECT * FROM table_name REPARTITION(500); ``` 以上方法综合运用可显著改善 Spark SQL 应用程序的整体吞吐能力和响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值