spark 配置整理

spark 的配置有很多,这里一方面总结一下官方文档中的内容,一方面将网上查到的资料中用到的针对特定问题的配置整理一下。

先看一下官网的配置:http://spark.apache.org/docs/latest/configuration.html

spark 配置可分为三层: spark properties、environment variables、还有logging

spark properties 是由用户自己设置的,在任务中通过 SparkConf 类设置:
val conf = new SparkConf()
             .setMaster("local")
             .setAppName("CountingSheep")
             .set("spark.executor.memory", "1g")val sc = new SparkContext(conf)

或者 你可以通过提交命令设置,这个时候 SparkConf 对象就不设置相关配置:

./bin/spark-submit --name "My app" --master local[4] --conf spark.shuffle.spill=false 
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar 

在提交作业的时候能设置哪些配置呢?可以通过 bin/spark-submit --help 查看
spark-submit 还会加载 conf/spark-defaults.conf 中的配置
spark.master            spark://5.6.7.8:7077
spark.executor.memory   512m
spark.eventLog.enabled  true
spark.serializer        org.apache.spark.serializer.KryoSerializer

如何查看已经配置的配置项?
http://spark-master:ui-port/history/application-id/environment/
需要关注的一些设置:


spark.executor.memory  默认 512M,设置executor 的 jvm的内存大小

spark.executor.extraJavaOptions 额外的jvm设置,比如说gc策略,但是这里不能设置 jvm 的内存大小

spark.executor.extraLibraryPath  设置额外的executor运行lib目录

spark.shuffle.consolidateFiles 默认 false , 如果设置成true,能够整合shuffle阶段产生的中间文件,当reduce任务比较多的时候能提高性能

spark.shuffle.spill 默认true,与下面的配置配合使用,用来限制shuffle阶段,reduce占用内存的大小,如果超过内存限制就将数据刷到磁盘

spark.shuffle.memoryFraction 默认 0.2,如果上面的配置设置为true,shuffle阶段的内存占用总的内存的比例,如果超过这个比例,就将数据存到磁盘上。如果经常将数据刷到磁盘,可以将这个比例提高。

spark.shuffle.spill.compress 默认为true,shuffle阶段将中间结果刷入磁盘是否压缩

spark.shuffle.compress 默认为true,shuffle阶段中间结果是否压缩,这两种压缩都是使用的:spark.io.compression.codec 压缩算法

spark.shuffle.file.buffer.kb 默认32,每一个在内存中的shuffle file的大小,不把中间文件都刷到磁盘,可以减少对磁盘的seek和系统调用

spark.reducer.maxMbInFlight 默认48,对于reduce端,默认的会有5个线程负责拉取shuffle的中间结果,这5个线程分享这48M的内存的缓冲空间。如果内存不太大,最好设置的小一点。
 spark.shuffle.manager 默认HASH,表示使用hash-based shuffle 算法,对于spark1.1版本,可以使用SORT,sort-based shuffle
 spark.eventLog.enabled 默认false,记录spark events,当application运行结束,可用于重建 web ui
 spark.eventLog.dir 默认 /tmp/spark-events, 如果spark.eventLog.enabled 为true,用来存放event log的地址,可以设置成hdfs的目录

spark.io.compression.codec 默认 snappy,spark用到的压缩地方统一的压缩算法,三种可选配置:org.apache.spark.io.LZ4CompressionCodec,org.apache.spark.io.LZFCompressionCodec,
org.apache.spark.io.SnappyCompressionCodec

spark.default.parallelism 不同的模式使用的默认值不同,一般情况默认为2,使用到shuffle的任务,比如groupByKey、reduceByKey,如果用户没有设置并行度,则使用这个配置的默认并行度
spark.akka.frameSize 默认10,单位兆,akka传递消息的最大值,如果你的任务需要将比较大的结果传给driver,可以提高这个值,比如说在比较大的数据集上调用.collect()

spark.akka.threads 默认4,用于akka通信的线程数,如果集群比较大,机器内核比较多,可以增大这个值

spark.task.cpus 默认1,每个task分配的cpu

spark.task.maxFailures 默认4,task重试的次数

spark.scheduler.mode 默认FIFO,同一个SparkContext提交的jobs之间使用的调度策略,可以设置成FAIR

spark.locality.wait 默认3000,单位毫秒,为了起一个data local 的任务可以等待的时间。
 spark.scheduler.revive.interval 默认 1000,单位毫秒,调度器激活task运行的时间间隔
 
对于在YARN集群上运行spark任务,还有一些特殊的配置需要注意:
 spark.yarn.submit.file.replication 默认3,提交到yarn上的任务所需要的jar或者文件的副本数
 spark.yarn.preserve.staging.files 默认false,如果设成true,将在任务运行完保存spark相关文件,比如 spark jar,app jar

spark.yarn.executor.memoryOverhead 默认384,单位兆,executor 分配的jvm内存,显然有点小

spark.yarn.driver.memoryOverhead 默认384,单位兆,driver的内存,也有点小

spark.yarn.jar  放spark jar文件的路径,当提交spark任务到yarn的时候,会将spark的jar和app的jar拷贝到hdfs的app的目录中,但是每一个任务都会用到spark的jar或者一些共用的jar包,所以,把这些共用jar包放到一个公共的位置,这样就省的每个任务都提交一次。例如:hdfs://some/path









<think>好的,我现在需要帮助用户了解如何在VS Code中配置Spark开发环境。首先,我得回想一下之前提供的引用内容,特别是引用[2]和[3],因为它们提到了VS Code和Spark配置。 用户的问题是关于VS Code配置Spark环境,所以重点应该放在引用[2]上。里面提到需要安装Java JDK 8,Scala插件,以及必要的扩展。同时,引用[3]可能涉及到Python环境配置,如果用户使用PySpark的话。 接下来,我需要整理步骤。首先安装Java,因为Spark依赖Java。然后安装Scala插件,因为Spark是用Scala写的,虽然用户可能用Python,但环境配置可能需要。接着在VS Code中安装相关扩展,比如Scala语法支持和Metals,这些能帮助开发。然后配置Spark的依赖,比如在build.sbt中添加库,或者设置环境变量,比如SPARK_HOME,可能需要引用[4]中的环境变量设置方法。 还需要考虑Python的情况,比如PySpark,这时候需要Anaconda配置Python环境,确保PySpark可以运行。引用[3]提到了添加Python脚本到PYTHONPATH,这可能涉及到环境变量的调整或者在代码中设置路径。 另外,用户可能会遇到Hadoop的依赖问题,引用[1]提到Windows下需要winutils.exe和hadoop.dll,这时候需要下载这些文件并配置HADOOP_HOME,避免出现错误。 测试部分,需要给出简单的Scala或Python代码示例,比如初始化SparkContext,运行一个简单的任务。同时要提醒用户可能需要配置日志级别,避免过多的日志输出。 可能的问题点包括Java版本不兼容,环境变量未正确设置,或者依赖包未正确导入。需要确保所有步骤都详细,并且用户能够按照指引操作。如果有遗漏的步骤,比如Gradle的配置(引用[4]),可能需要提及,但主要关注VS Code相关的部分。 总结下来,步骤应该是:安装Java和Scala,VS Code扩展,配置环境变量,处理Hadoop依赖,创建项目并添加依赖,编写测试代码。同时,生成的问题需要围绕环境配置的常见问题,优化方法,以及与其他工具的比较。</think>### 如何在 VS Code 中配置 Spark 开发环境 以下是分步配置指南,结合引用内容整理: --- #### **1. 安装基础依赖** - **Java JDK 8**:Spark 依赖 Java 运行环境,需安装 JDK 8(推荐 OpenJDK 或 Oracle JDK)。安装完成后配置环境变量: ```bash JAVA_HOME: C:\Program Files\Java\jdk1.8.0_xxx Path: %JAVA_HOME%\bin ``` 验证:命令行输入 `java -version`。 - **Scala(可选)**:若需使用 Scala 开发 Spark 应用,安装 Scala SDK 并配置环境变量[^2]。 --- #### **2. 安装 VS Code 扩展** - **Scala 语法支持**:安装插件 `Scala Syntax (official)`。 - **Metals 扩展**:提供 Scala 智能提示、调试等功能(搜索并安装 `Metals`)。 - **Python 扩展(PySpark)**:若使用 PySpark,安装 `Python` 扩展并配置 Anaconda 环境[^3]。 --- #### **3. 配置 Spark 依赖** - **下载 Spark**:从官网下载预编译的 Spark 包(如 `spark-3.x.x-bin-hadoop3.tgz`),解压到本地目录(如 `E:\spark`)。 - **设置环境变量**: ```bash SPARK_HOME: E:\spark Path: %SPARK_HOME%\bin ``` - **Hadoop 依赖**(Windows 用户): - 下载 `winutils.exe` 和 `hadoop.dll`,放入 `%SPARK_HOME%\bin` 目录。 - 设置 `HADOOP_HOME` 为 Spark 目录以避免报错[^1]。 --- #### **4. 创建 Spark 项目** - **Scala 项目**: 1. 使用 `sbt` 或 `Gradle` 初始化项目(参考引用[4]的 Gradle 配置)。 2. 在 `build.sbt` 中添加 Spark 依赖: ```scala libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.1" ``` 3. 通过 Metals 插件加载依赖。 - **PySpark 项目**: 1. 创建 Python 虚拟环境: ```bash conda create -n pyspark_env python=3.8 conda activate pyspark_env pip install pyspark ``` 2. 在 VS Code 中选择该虚拟环境[^3]。 --- #### **5. 编写测试代码** - **Scala 示例**: ```scala import org.apache.spark.SparkContext import org.apache.spark.SparkConf object WordCount { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]") val sc = new SparkContext(conf) val data = sc.textFile("input.txt") data.flatMap(_.split(" ")).countByValue().foreach(println) sc.stop() } } ``` - **PySpark 示例**: ```python from pyspark.sql import SparkSession spark = SparkSession.builder.master("local").appName("Test").getOrCreate() df = spark.createDataFrame([("Hello", 1), ("World", 2)], ["Text", "Value"]) df.show() ``` --- #### **6. 调试与运行** - **Scala**:通过 Metals 插件直接运行或调试。 - **PySpark**:在 Python 文件中右键选择运行,或配置 `launch.json` 调试任务。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值