Spark主要提供三种位置配置系统:
- 环境变量:用来启动Spark workers,可以设置在你的驱动程序或者conf/spark-env.sh 脚本中;
- java系统性能:可以控制内部的配置参数,两种设置方法:
- 编程的方式(程序中在创建SparkContext之前,使用System.setProperty(“xx”,“xxx”)语句设置相应系统属性值);
- 在conf/spark-env.sh中配置环境变量SPARK_JAVA_OPTS。
- 日志配置:通过log4j.properties实现
一、环境变量
spark安装目录下的conf/spark-env.sh脚本决定了如何初始化worker nodes的JVM,甚至决定了你在本地如何运行spark-shell。在Git库中这个脚本默认是不存在的,但是你可以自己创建它并通过复制con/spark-env.sh.template中的内容来配置,最后要确保你创建的文件可执行。
在spark-env.sh中你至少有两个变量要设置:
- SCALA_HOME,指向你的scala安装路径;或者是SCALA_LIBRARY_PATH指向scala library JARS所在的目录(如果你是通过DEB或者RPM安装的scala,他们是没有SCALA_HOME的,但是他们的libraries是分离的,默认在/usr/share/java中查找scala-library.jar)
- MESOS_NATIVE_LIBRARY,如果你要在Mesos上运行集群的话
另外,还有其他四个变量来控制执行。应该将他们设置在启动驱动程序的环境中来取代设置在spark-env.sh,因为这样这些设置可以自动传递给workers。将他们设置在每个作业中而不是spark-env.sh中,这样确保了每个作业有他们自己的配置。
- SPARK_JAVA_ORTS,添加JVM选项。你可以通过-D来获取任何系统属性;
- SPARK_CLASS_PATH,添加元素到Spark的classpth中;
- SPARK_LIBARAT_OATH,添加本地libraries的查找目录;
- SPARK_MEM,设置每个节点所能使用的内存总量。他们应该和JVM‘s -Xmx选项的格式保持一致(e.g.300m或1g)。注意:这个选项将很快被弃用支持系统属性spark.executor.memory,所以我们推荐将它使用在新代码中。
注意:如果你将他们设置在spark-env.sh中,他们将覆盖用户程序设定的值,这是不可取的。如果你喜欢,你可以选择在spark-env.sh设置他们仅当用户程序没有做任何设置时,例如:
if[-z "$SPARK_JAVA_OPTS"];then
SPARK_JAVA_OPTS="-verbose:gc"fi
二、系统属性
通过设置系统属性来配置Spark,你必须通过以下两种方式中的任意一个来达到目的:
- 在JVM中通过-D标志(例如:java -Dspark.cores.max=5 MyProgram)
- 在你的程序中创建SparkContext之前调用System.setProperty,如下:
System.setProperty("spark.cores.max","5")
val sc =newSparkContext(...)
更多可配置的控制内部设置的系统属性已经有了合理的默认属性值。然而,有五个属性通常是你想要去控制的:
spark.executor.memory | 512m | 每个处理器可以使用的内存大小,跟JVM的内存表示的字符串格式是一样的(比如: '512m','2g') |
spark.serializer | spark.JavaSerializer | 一个类名,用于序列化网络传输或者以序列化形式缓存起来的各种对象。默认情况下Java的序列化机制可以序列化任何实现了Serializable接口的对象,但是速度是很慢的,因此当你在意运行速度的时候我们建议你使用spark.KryoSerializer 并且配置 Kryo serialization。可以是任何 spark.Serializer的子类。 |
spark.kryo.registrator | (none) | 如果你使用的是Kryo序列化,就要为Kryo设置这个类去注册你自定义的类。这个类需要继承spark.KryoRegistrator。 可以参考 调优指南 获取更多的信息。 |
spark.local.dir | /tmp | 设置Spark的暂存目录,包括映射输出文件盒需要存储在磁盘上的RDDs。这个磁盘目录在你的系统上面访问速度越快越好。可以用逗号隔开来设置多个目录。 |
spark.cores.max | (infinite) | 当运行在一个独立部署集群上或者是一个粗粒度共享模式的Mesos集群上的时候,最多可以请求多少个CPU核心。默认是所有的都能用。 |
除了这些,在某些情况下以下属性可能也是需要设置的:
spark.mesos.coarse | false | 如果设置为了"true",将以粗粒度共享模式运行在Mesos集群上, 这时候Spark会在每台机器上面获得一个长期运行的Mesos任务,而不是对每个Spark任务都要产生一个Mesos任务。对于很多短查询,这个可能会有些许的延迟,但是会大大提高Spark工作时的资源利用率。 |
spark.default.parallelism | 8 | 在用户没有指定时,用于分布式随机操作(groupByKey,reduceByKey等等)的默认的任务数。 |
spark.storage.memoryFraction | 0.66 | Spark用于缓存的内存大小所占用的Java堆的比率。这个不应该大于JVM中老年代所分配的内存大小,默认情况下老年代大小是堆大小的2/3,但是你可以通过配置你的老年代的大小,然后再去增加这个比率。 |
spark.ui.port | (random) | 你的应用程序控制面板端口号,控制面板中可以显示每个RDD的内存使用情况。 |
spark.shuffle.compress | true | 是否压缩映射输出文件,通常设置为true是个不错的选择。 |
spark.broadcast.compress | true | 广播变量在发送之前是否先要被压缩,通常设置为true是个不错的选择。 |
spark.rdd.compress | false | 是否要压缩序列化的RDD分区(比如,StorageLevel.MEMORY_ONLY_SER)。在消耗一点额外的CPU时间的代价下,可以极大的提高减少空间的使用。 |
spark.reducer.maxMbInFlight | 48 | 同时获取每一个分解任务的时候,映射输出文件的最大的尺寸(以兆为单位)。由于对每个输出都需要我们去创建一个缓冲区去接受它,这个属性值代表了对每个分解任务所使用的内存的一个上限值,因此除非你机器内存很大,最好还是配置一下这个值。 |
spark.closure.serializer | spark.JavaSerializer | 用于闭包的序列化类。通常Java是可以胜任的,除非在你的驱动程序中分布式函数(比如map函数)引用了大量的对象。 |
spark.kryoserializer.buffer.mb | 32 | Kryo中运行的对象的最大尺寸(Kryo库需要创建一个不小于最大的单个序列化对象的缓存区)。如果在Kryo中出现"buffer limit exceeded"异常,你就需要去增加这个值了。注意,对每个worker而言,一个核心就会有一个缓冲。 |
spark.broadcast.factory | spark.broadcast.HttpBroadcastFactory | 使用哪一个广播实现 |
spark.locality.wait | 3000 | 在发布一个本地数据任务时候,放弃并发布到一个非本地数据的地方前,需要等待的时间。如果你的很多任务都是长时间运行的任务,并且看到了很多的脏数据的话,你就该增加这个值了。但是一般情况下缺省值就可以很好的工作了。 |
spark.worker.timeout | 60 | 如果超过这个时间,独立部署master还没有收到worker的心跳回复,那么就认为这个worker已经丢失了。 |
spark.akka.frameSize | 10 | 在控制面板通信(序列化任务和任务结果)的时候消息尺寸的最大值,单位是MB。如果你需要给驱动器发回大尺寸的结果(比如使用在一个大的数据集上面使用collect()方法),那么你就该增加这个值了。 |
spark.akka.threads | 4 | 用于通信的actor线程数量。如果驱动器有很多CPU核心,那么在大集群上可以增大这个值。 |
spark.akka.timeout | 20 | Spark节点之间通信的超时时间,以秒为单位 |
spark.driver.host | (local hostname) | 驱动器监听主机名或者IP地址. |
spark.driver.port | (random) | 驱动器监听端口号 |
spark.cleaner.ttl | (disable) | Spark记忆任何元数据(stages生成,任务生成等等)的时间(秒)。周期性清除保证在这个时间之前的元数据会被遗忘。当长时间几小时,几天的运行Spark的时候设置这个是很有用的。注意:任何内存中的RDD只要过了这个时间就会被清除掉。 |
spark.streaming.blockInterval | 200 | 从网络中批量接受对象时的持续时间。 |
spark.task.maxFailures | 4 | task失败重试次数 |
三、配置日志
Spark使用log4j来记录。你可以在conf目录中添加log4j.properties文件来配置。一种方法是复制本地已存在的log4j.properties.template
相关推荐
<value>hdfs://hadoop-spark:9000 <name>hadoop.tmp.dir <value>/opt/data1/tmp </configuration> ``` 在重新格式化 NameNode 时,只需更改 `hadoop.tmp.dir` 而不需要删除其他内容。 2. `hdfs-site....
本文档主要介绍Spark 1.6.2的配置方法,包括Spark的系统配置和应用配置。对于进行大数据处理开发的用户来说,了解和掌握这些配置项至关重要。 1. 系统配置概述 在配置Spark系统时,有三个可配置的位置,分别是系统...
spark-submit --class <main_class> --master spark://localhost:7077 path/to/your-application.jar ``` - **使用 Spark Shell**: - 启动 Scala Shell: ```bash spark-shell ``` - 启动 Python Shell: `...
在代码实现上,我们可以创建一个`SparkConfig`类,使用Spring Boot的`@Configuration`注解来声明这是一个配置类。在这个类中,我们可以初始化SparkContext(`SparkConf`和`SparkSession`),并将其作为Bean注入到...
val conf = spark.sparkContext.hadoopConfiguration conf.set("hbase.zookeeper.quorum", "zookeeper_host") conf.set("hbase.zookeeper.property.clientPort", "2181") // 替换为实际值 ``` 现在,我们可以创建一...
接下来,我们需要创建一个Spring Boot的配置类,用于设置Spark的相关属性,如Master地址、配置文件等。例如: ```java @Configuration public class SparkConfig { @Value("${spark.master}") private String ...
pyspark --master local[4] --packages org.apache.spark:spark-mllib_2.12:3.2.1 ``` 接着在 PySpark 命令行中运行脚本: ```python %run /path/to/linear_regression.py ``` #### 四、总结 本文详细介绍...
**Terraform与Amazon EMR Spark集群配置** Terraform是一种流行的基础设施即代码(IAC)工具,允许用户以声明式的方式管理云基础设施。在这个名为"terraform-emr-spark-example"的项目中,我们将深入探讨如何使用...
您可以在找到它们安装适用于 Windows 的 Spark Core USB 驱动程序安装 Node.js 安装 Spark-CLI 创建一个 Spark Build 帐户领取您的 Spark Core 配置 Spark Core 的 WiFi 确定您的 Spark 核心将代码部署到 Spark ...
spark-submit --class org.apache.spark.examples.SparkPi --master spark://localhost:7077 $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar ``` 该命令用于计算圆周率的近似值,通过 Spark 提交一个名...
$SPARK_HOME/sbin/start-slave.sh spark://master:7077 ``` 通过访问`http://master:8080`可以看到Master的UI界面,显示集群的状态和正在运行的应用程序信息。 #### 三、应用项目示例 完成Hadoop和Spark的安装...
Spark Configuration: Spark 配置是 Spark Autotuning 的核心组件。数据科学家们需要设置执行器的大小、数量和 partition 的数量,以便 Spark 可以高效地执行算法。然而,手动调整这些参数是一个耗时且低效的过程...
- 进入 `/opt/spark/conf/` 目录,复制 `spark-env.sh.template` 为 `spark-env.sh`,并设置 `HADOOP_CONF_DIR` 指向 Hadoop 的配置文件目录。示例配置如下: ```bash export HADOOP_CONF_DIR=$HADOOP_HOME/etc/...
Exception in thread "main" org.apache.spark.SparkException: Amaster URL must be set in your configuration at org.apache.spark.SparkContext.(SparkContext.scala:206) at org.apache.spark.api.java....
Spark设计模式旨在为自适应应用程序原型提供各种用例场景和体系结构概念。 mkdocs.yml # Configuration file. docs/ readme.md # General information summary.md # Table of contents units/ design-patterns...
### Hadoop & Spark 安装、环境配置及使用教程 #### 一、安装与环境配置 ##### 1. 安装前准备 - **确保Java安装**:Hadoop与Spark均依赖于Java运行,因此首先需要确保系统已安装Java (JDK 8或更高版本)。 - **...
单击+号,然后选择“ Application 选择您的Module和Main Class 打开VM Options然后复制/粘贴(并根据需要更改): -Dlog4j.configuration=file:log4j.properties-Dlogfile.name=application-Dspark.yarn.app....
### Spark集群安装与配置详解 #### 一、整体流程概览 为了搭建一个高效且稳定的Spark集群,我们首先需要理解整个部署过程的关键步骤。本文档将详细介绍如何通过配置三台虚拟机来完成这一任务,包括一台Master节点...
spark streaming job 打成jar包,在linux系统下运行local模式,报错: 18/04/12 14:14:18 ERROR SparkContext: Error initializing SparkContext. com.typesafe.config.ConfigException$Missing: No configuration ...
在IT行业中,Spark和Kafka是两种非常重要的大数据处理框架。Spark以其高效的计算能力和丰富的库支持,被广泛用于数据...记住,根据实际项目需求,你可能还需要调整Spark和Kafka的配置,优化性能或者增加错误处理机制。