Spark配置文件之spark-env.sh参数配置详解。
环境变量 | 含义 |
---|---|
SPARK_MASTER_IP | master实例绑定的IP地址 |
SPARK_MASTER_PORT | mater实例绑定的端口(默认7077) |
SPARK_MASTER_WEBUI_PORT | master web UI的端口(默认8080) |
SPARK_MASTER_OPTS | master专用配置属性,格式如”-Dx=y” (默认空),可能的选项请参考下面的列表。 |
SPARK_LOCAL_DIRS | Spark的本地工作目录,包括:映射输出的临时文件和RDD保存到磁盘上的临时数据。这个目录需要快速访问,最好设成本地磁盘上的目录。也可以通过使用逗号分隔列表,将其设成多个磁盘上的不同路径。 |
SPARK_WORKER_CORES | 本机上Spark应用可以使用的CPU core上限(默认所有CPU core) |
SPARK_WORKER_MEMORY | 本节点上Spark应用可以使用的内存上限,如:1000m,2g(默认为本机所有内存减去1GB);注意每个应用单独使用的内存大小要用 spark.executor.memory 属性配置的。 |
SPARK_WORKER_PORT | Spark worker绑定的端口(默认随机) |
SPARK_WORKER_WEBUI_PORT | worker web UI端口(默认8081) |
SPARK_WORKER_INSTANCES | 每个slave机器上启动的worker实例个数(默认:1)。如果你的slave机器非常强劲,可以把这个值设为大于1;相应的,你需要设置SPARK_WORKER_CORES参数来显式地限制每个worker实例使用的CPU个数,否则每个worker实例都会使用所有的CPU。 |
SPARK_WORKER_DIR | Spark worker的工作目录,包括worker的日志以及临时存储空间(默认:${SPARK_HOME}/work) |
SPARK_WORKER_OPTS | worker的专用配置属性,格式为:”-Dx=y”,可能的选项请参考下面的列表。 |
SPARK_DAEMON_MEMORY | Spark master和worker后台进程所使用的内存(默认:1g) |
SPARK_DAEMON_JAVA_OPTS | Spark master和workers后台进程所使用的JVM选项,格式为:”-Dx=y”(默认空) |
SPARK_PUBLIC_DNS | Spark master和workers使用的公共DNS(默认空) |
SPARK_MASTER_OPTS支持以下属性:
属性名 | 默认值 | 含义 |
---|---|---|
spark.deploy.retainedApplications | 200 | web UI上最多展示几个已结束应用。更早的应用的数将被删除。 |
spark.deploy.retainedDrivers | 200 | web UI上最多展示几个已结束的驱动器。更早的驱动器进程数据将被删除。 |
spark.deploy.spreadOut | true | 独立部署集群的master是否应该尽可能将应用分布到更多的节点上;设为true,对数据本地性支持较好;设为false,计算会收缩到少数几台机器上,这对计算密集型任务比较有利。 |
spark.deploy.defaultCores | 无限制 | Spark独立模式下应用程序默认使用的CPU个数(没有设置spark.cores.max的情况下)。如果不设置,则为所有可用CPU个数(除非设置了spark.cores.max)。如果集群是共享的,最好将此值设小一些,以避免用户占满整个集群。 |
spark.worker.timeout | 60 | 如果master没有收到worker的心跳,那么将在这么多秒之后,master将丢弃该worker。 |
SPARK_WORKER_OPTS支持以下属性:
属性名 | 默认值 | 含义 |
---|---|---|
spark.worker.cleanup.enabled | false | 是否定期清理 worker 和应用的工作目录。注意,该设置仅在独立模式下有效,YARN有自己的清理方式;同时,只会清理已经结束的应用对应的目录。 |
spark.worker.cleanup.interval | 1800 (30 minutes) | worker清理本地应用工作目录的时间间隔(秒) |
spark.worker.cleanup.appDataTtl | 7 24 3600 (7 days) | 清理多久以前的应用的工作目录。这个选项值将取决于你的磁盘总量。spark应用会将日志和jar包都放在其对应的工作目录下。随着时间流逝,应用的工作目录很快会占满磁盘,尤其是在你的应用提交比较频繁的情况下。 |
SPARK_DAEMON_JAVA_OPTS支持以下属性:
name | 111 |
---|---|
spark.deploy.recoveryMode | Spark master HA配置模式,默认为NONE,可配置成FILESYSTEM或者ZOOKEEPER。 |
spark.deploy.recoveryDirectory | Spark HA FILESYSTEM模式下保存恢复状态的目录 |
spark.deploy.zookeeper.url | Spark HA ZOOKEEPER模式下的zk集群地址 |
spark.deploy.zookeeper.dir | Spark HA ZOOKEEPER模式下保存恢复状态的目录 |
关于以上几个配置参数的说明 (Spark On Yarn cluster模式):
如果没有配置SPARK_WORKER_INSTANCES参数,那么一个slave节点上worker的实例个数就是1。此时SPARK_WORKER_CORES和SPARK_WORKER_MEMORY属性就是本worker节点上所有executor所有可用cores和memory的总和。看如下示例:
export SPARK_WORKER_CORES=8
export SPARK_WORKER_MEMORY=8g
假如executors=4,那么每个executor的可用cores为2,可用memory为2g。
也就是说:
- 一个slave节点=一台机器可以配置多个worker (机器性能较好的情况下),一般都是一个worker。
- 一个worker包括多个Executor,这多个Executor所有可用资源的总和就是SPARK_WORKER_CORES和SPARK_WORKER_MEMORY。
- 一个executor中Task的数量=core数量,一个Task可以看做是executor进程中的一个线程。
- 一个job中Executor数量等于AM的一个Executor加通过–num-executors指定的实际运行任务的Executor数量。
- 一个job的Task被执行的并发度 = Executor数目 * 每个Executor核数。
- Container数量=Executor数量。
- AM的Executor进程名为ApplicationMaster,执行任务的Executor进程名为CoarseGrainedExecutorBackend。