Spark 官方文档——Configuration配置

本文详细解析了Apache Spark中分区的默认设置与调整策略,包括local、local-cluster、yarn和standalone模式下的分区数计算规则,以及如何通过调整参数如executor_cores、executor_memory和spark_parallelism来优化大量task的情况,提升Spark作业执行效率。

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

官方文档:http://spark.apache.org/docs/latest/configuration.html
Configuration配置:https://www.cnblogs.com/bigbigtree/p/5685298.html
https://www.cnblogs.com/bigbigtree/category/850078.html
在这里插入图片描述
如果在spark-default.conf中没有显示设置的话。会按照不同模式给不同的默认分区数。(spark.default.parallelism)

对于local[N]模式,因为开辟了N个线程,所以有N个core,也就默认分区为N。如果单用local那么只会开起一个分区。

如果是伪分布模式,local-cluster[x,y,z] 那么默认分区是x*y,x代表的是运行的executor数量,y是每个executor有多少个core。

如果是yarn或者是standalone模式。是用的函数max(x*y,2)前者的含义和伪分布一样,后者表示如果x*y<2,分区就取2。

在程序读取创建RDD的时候,一般会用textFile,这个函数可以读取本地或者是hdfs的文件。分区数为

rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)
rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)

但是对于用 sc.parallelize创建的数据,是用的默认分区,也可以在第二个参数中进行显示的设置。

对于问题本身:task过多,原因是分区的问题。我们应该从分区入手,是输入的小文件太多,还是本来就会有大数据量。在分区过多时,限定分区个数看看性能是否提高,也可以在filter等操作后对分区进行一定缩减。大量使用shuffle操作使task增加(这个应该不是本问题原因,但是我们应该考虑这也是让task增加的原因),这样会完成多个stage串行会降低效率。

当我们真的无法避免这么多task时候,我们应该用最佳的参数进行调优。下面参数是来自浪尖的建议

  1. executor_cores*num_executors 不宜太小或太大!一般不超过总队列 cores 的 25%,比如队列总 cores 400,最大不要超过100,最小不建议低于 40,除非日志量很小。

  2. executor_cores 不宜为1!否则 work 进程中线程数过少,一般 2~4 为宜。

  3. executor_memory 一般 6~10g 为宜,最大不超过 20G,否则会导致 GC 代价过高,或资源浪费严重。

  4. spark_parallelism 一般为 executor_cores*num_executors 的 1~4 倍,系统默认值 64,不设置的话会导致 task 很多的时候被分批串行执行,或大量 cores 空闲,资源浪费严重。

  5. driver-memory 早前有同学设置 20G,其实 driver 不做任何计算和存储,只是下发任务与yarn资源管理器和task交互,除非你是 spark-shell,否则一般 1-2g 就够了。

Hadoop安装根据您提供的图片,以下是您需要执行的步骤,以确保 Hadoop 和 HBase 服务正确安装并配置,然后完成您的任务: ### 1. 登录到虚拟机并启动 Hadoop 服务 确保您已经登录到虚拟机并打开终端。根据图片,您已经执行了以下命令来启动 Hadoop 服务: ```bash cd /usr/local/hadoop/sbin ./start-dfs.sh ``` 这将启动 Hadoop 的分布式文件系统(HDFS)。 ### 2. 创建输入数据目录 在 Hadoop 用户下创建一个名为 `data_input` 的目录,用于存放输入数据: ```bash hdfs dfs -mkdir -p /user/hadoop/data_input ``` ### 3. 生成学生信息文本文件 使用 `nano` 编辑器创建一个名为 `students.txt` 的文件,并输入以下内容: ```bash nano students.txt ``` 输入以下内容: ``` 001,Alice,20 002,Bob,21 003,Charlie,22 004,David,20 005,Eve,21 ``` 保存并退出 `nano`。 ### 4. 将文件上传到 HDFS 将 `students.txt` 文件上传到 HDFS 的 `data_input` 目录下: ```bash hdfs dfs -put students.txt /user/hadoop/data_input ``` ### 5. 启动 HBase 服务 根据图片,您已经执行了以下命令来启动 HBase 服务: ```bash cd /usr/local/hbase/bin ./start-hbase.sh ``` ### 6. 创建 HBase 表 使用 HBase shell 创建一个名为 `students` 的表,该表包含一个列族 `info`: ```bash hbase shell create 'students', 'info' ``` ### 7. 导入数据到 HBase 在 HBase shell 中,将 HDFS 上 `data_input` 目录下的 `students.txt` 文件中的数据逐行导入到 HBase
最新发布
05-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值