注重版权,尊重他人劳动
 
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 = 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

【译】Spark官方文档——Spark Configuration(Spark配置)的更多相关文章

  1. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

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

    Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过lo ...

  3. 【译】Spark官方文档——编程指南

    本文翻自官方博客,略有添加:https://github.com/mesos/spark/wiki/Spark-Programming-Guide Spark发指南 从高的面看,其实每一个Spark的 ...

  4. 《Spark 官方文档》在Mesos上运行Spark

    本文转自:http://ifeve.com/spark-mesos-spark/ 在Mesos上运行Spark Spark可以在由Apache Mesos 管理的硬件集群中运行. 在Mesos集群中使 ...

  5. spark api之一:Spark官方文档 - 中文翻译

    转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linking with Spark) 3 初始化Spark(Initi ...

  6. spark 官方文档(1)——提交应用程序

    Spark版本:1.6.2 spark-submit提供了在所有集群平台提交应用的统一接口,你不需要因为平台的迁移改变配置.Spark支持三种集群:Standalone.Apache Mesos和Ha ...

  7. Spark官方文档——独立集群模式(Standalone Mode)

    除了部署在Mesos之上, Spark也支持独立部署模式,包括一个Spark master进程和多个 Spark worker进程.独立部署模式可以运行在单机上作为测试之用,也可以部署在集群上.如果你 ...

  8. Spark官方文档——本地编写并运行scala程序

    快速开始 本文将介绍如何用scala.java.python编写一个spark单击模式的程序. 首先你只需要在一台机器上成功建造Spark:做法: 进入Spark的根目录,输入命令:$ sbt/sbt ...

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

    Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...

随机推荐

  1. POJ 2516 Minimum Cost [最小费用最大流]

    题意略: 思路: 这题比较坑的地方是把每种货物单独建图分开算就ok了. #include<stdio.h> #include<queue> #define MAXN 500 # ...

  2. HYSBZ 1036 【树链剖分】

    思路: 裸裸的树链剖分.... 树链剖分就是把一棵树分成若干重链和轻链...然后保证形成的线段树上每条链是连续存储的.然后这样就能用线段树进行维护了. 但是每次一定要保证是在同一条链里边....思路就 ...

  3. Android--ListView显示列表数据

    简单的显示 import android.os.Bundle; import android.app.ListActivity; import android.view.View; import an ...

  4. 使用spring的邮件发送功能

    使用spring提供的MailSender和JavaMailSender类. 1.邮件对象类 package cn.luxh.app.mail; import java.util.List; impo ...

  5. MySQL主存复制与读写分离的感悟

    1.主存复制: 就是实现数据拷贝,有点实时的感觉,完成数据同步,存储两份数据. 项目开发中,类似场景许多,尤其是异构系统之间的交互,协作.-------------------场景目的:为了安全,各自 ...

  6. IIS报错,App_global.asax.×××.dll拒绝访问

    解决方案: ①找到C:\Windows下的temp文件夹 ②属性->安全->编辑->添加IIS_IUSERS,给其添加上可读写的权限,然后应用,确定即可

  7. Codeforces Round #218 (Div. 2) D. Vessels

    D. Vessels time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  8. Gradle用户指南(章8:依赖关系管理基础)

    章8:依赖关系管理基础 本章将介绍一些gradle依赖关系管理的基础 什么是依赖关系管理? 简略的说,依赖管理是由两部分组成的.首先,gradle需要知道你要构建或者运行的项目,以便找到它们.我们将这 ...

  9. Lambda表达式有何用处?如何使用?

    简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.这一用法跟所谓 λ 演算(题目说明里的维基链接)的关系,有点像原子弹和质 ...

  10. Weblogic发布小问题——The root element weblogic-web-app is missing in the descriptor file

    前几天发布项目遇到这样一个小错误,在此记录一下,以便加深一点印象,下次好解决类似的问题! (对应的应用服务器是WebLogic Server 版本: 10.3.6.0,应用是以文件夹的形式发在服务器的 ...