1、环境变量html
spark安装目录下的conf/spark-env.sh脚本决定了如何初始化worker nodes的JVM,甚至决定了你在本地如何运行spark-shell。在Git库中这个脚本默认是不存在的,可是你能够本身建立它并经过复制con/spark-env.sh.template中的内容来配置,最后要确保你建立的文件可执行。java
在spark-env.sh中你至少有两个变量要设置:node
2、系统属性
经过设置系统属性来配置Spark,你必须经过如下两种方式中的任意一个来达到目的:if [ -z "$SPARK_JAVA_OPTS" ] ; then SPARK_JAVA_OPTS="-verbose:gc" fi
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失败重试次数 |