Spark官方文档: Spark Configuration(Spark配置)

Spark官方文档: Spark Configuration(Spark配置)

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" ] ; thenSPARK_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 = new SparkContext(...)

更多可配置的控制内部设置的系统属性已经有了合理的默认属性值。然而,有五个属性通常是你想要去控制的:

属性名称 默认值 含义
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

时间: 2024-10-18 18:07:44

Spark官方文档: Spark Configuration(Spark配置)的相关文章

(三)Kafka0.8.2官方文档中文版系列-topic配置参数

前文链接: (一)Kafka0.8.2官方文档中文版系列-入门指南 (二)Kafka0.8.2官方文档中文版系列-API Topic-level configuration(主题级别的参数配置) 与主题相关的配置具有全局默认值(参考broker部分)和每个主题可选重写(broker部分有明确提示).如果主题没有重写这些配置,使用全局默认设置.可以使用--config添加一个或者多个自定义选项.下面这个例子创建了一个名为my-topic的主题,它自定义了最大消息大小和刷新速率: > bin/kaf

Spark 官方文档(4)——Configuration配置

Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过log4j.properties配置日志属性 Spark属性 Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性. 下面展示了在本地机使用两个线程并发执行的配置代码: val conf = new SparkConf() .setMas

Spark官方文档中推荐的硬件配置

1.关于存储: 1).可能的话,Spark节点与HDFS节点是一一对应的 2).如果做不到,那至少保证Spark节点与HDFS节点是一个局域网内 2.关于硬盘: 1).官方推荐每台机子4-8个硬盘,然后不需要做RAID(因为本身你的硬盘就是用来做),配置 spark.local.dir结点啦 3.关于内存 1).官方建议给spark配置当前机器内存的75%比较合理 2).当一个节点的内存超过200G的时候,建议将当前节点的worker换成两个,平均分配你的资源.  因为超过200G后,JAVA的

Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南

Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完成特殊优化.可以通过SQL.DataFrames API.Datasets API与Spark SQL进行交互,无论使用何种方式,SparkSQL使用统一的执行引擎记性处理.用户可以根据自己喜好,在不同API中选择合适的进行处理.本章中所有用例均可以在spark-shell.pyspark shel

摘抄官方文档: spring boot配置 iframe同源可访问

使用java配置,跟spring security配置在一起 @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http // ... .headers() .frameOptions().sameOrigin() .http

Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

在前面的文档中讲解了Spring MVC的特殊beans,以及DispatcherServlet使用的默认实现.在本部分,你会学习两种额外的方式来配置Spring MVC.分别是:MVC Java config 和  MVC XML namespace. 原文: Section 22.2.1, "Special Bean Types In the WebApplicationContext" and Section 22.2.2, "Default DispatcherSer

Echarts 明明和官方文档配置一致,图表加载却是报错:Error in mounted hook: "TypeError: Cannot read property 'get' of undefined",重新npm run dev,问题解决。

在搞Echarts的关系图graph,一开始正常显示,如下: 然而就在本人修改了option里的curveness = 0.2,ctrl+f5强制刷新页面后,图表加载报错:Error in mounted hook: "TypeError: Cannot read property 'get' of undefined" 一开始以为是因为curveness的修改而报错,遂回退修改,然而问题依旧. 于是乎,研究一下报错的地方,就是“axisModel = undefined”这个鬼东西报

Spring 4 官方文档学习(十一)Web MVC 框架之约定优于配置

当返回一个ModelAndView时,可以使用其addObject(Object obj)方法,此时的约定是: An x.y.User instance added will have the name user generated. An x.y.Registration instance added will have the name registration generated. An x.y.Foo instance added will have the name foo gener

【甘道夫】Spark1.3.0 Submitting Applications 官方文档精华摘要

引言 由于工作需要,即将拥抱Spark,曾经进行过相关知识的学习,现在计划详细读一遍最新版本Spark1.3的部分官方文档,一是复习,二是了解最新进展,三是为公司团队培训做储备. 欢迎转载,请注明出处: http://blog.csdn.net/u010967382/article/details/45062381 原文URL:http://spark.apache.org/docs/latest/submitting-applications.html 该文档重点介绍如何将编写好的Spark应