|
Environment Variable | Meaning |
---|---|
SPARK_MASTER_IP | 绑定一个外部IP给master. |
SPARK_MASTER_PORT | 从另外一个端口启动master(默认: 7077) |
SPARK_MASTER_WEBUI_PORT | Master的web UI端口 (默认: 8080) |
SPARK_WORKER_PORT | 启动Spark worker 的专用端口(默认:随机) |
SPARK_WORKER_DIR | 伸缩空间和日志输入的目录路径(默认: SPARK_HOME/work); |
SPARK_WORKER_CORES | 作业可用的CPU内核数量(默认: 所有可用的); |
SPARK_WORKER_MEMORY | 作业可使用的内存容量,默认格式1000M或者 2G (默认: 所有RAM去掉给操作系统用的1 GB);注意:每个作业自己的内存空间由SPARK_MEM决定。 |
SPARK_WORKER_WEBUI_PORT | worker 的web UI 启动端口(默认: 8081) |
SPARK_WORKER_INSTANCES | 没太机器上运行worker数量 (默认: 1). 当你有一个非常强大的计算机的时候和需要多个Spark worker进程的时候你可以修改这个默认值大于1 . 如果你设置了这个值。要确保SPARK_WORKER_CORE 明确限制每一个r worker的核心数, 否则每个worker 将尝试使用所有的核心 |
SPARK_DAEMON_MEMORY | 分配给Spark master和 worker 守护进程的内存空间 (默认: 512m) |
SPARK_DAEMON_JAVA_OPTS | Spark master 和 worker守护进程的JVM 选项(默认: none) |
注意: 启动脚本目前不支持Windows。要运行一个Spark 集群在Windows上,手动启动master 和 workers
一. Spark相关概念
1. Worker:在Standalone模式中,指的就是slaves文件中配置的节点,在Spark on Yarn模式中,指的就是NodeManager节点。
2. Standalone模式:Spark原生的资源管理框架,由Master负责资源的分配。
3. DAGScheduler:负责每个Job中Stage的划分和调度。
4. Executor:一个Application运行在Worker节点的一个进程。每个Worker上存在一个或者多个该进程。每个进程包含一个Executor对象,该对象持有一个线程池,每个线程可以执行一个Task。
5. Yarn模式:Yarn-Cluster中Driver和Executor都运行在Yarn集群中;Yarn-Client中Driver运行在本地,Executor运行在Yarn集群中。
二. Spark相关配置
1. Standalone模式
(1)SPARK_WORKER_CORES:每个Worker节点所能提供给所有Spark Application使用的CPU的总数目。
(2)SPARK_WORKER_MEMORY:每个Worker节点所能提供给所有Spark Application使用的内存的总大小。
(3)SPARK_WORKER_INSTANCES:每个Worker节点启动的Worker进程的数量。
(4)SPARK_DAEMON_MEMORY:Master进程和Worker进程启动时的默认内存大小(512M)。
说明:
(1)每个节点使用的最大内存数:SPARK_WORKER_INSTANCES*SPARK_WORKER_MEMORY;
(2)每个节点的最大并发Task数:SPARK_WORKER_INSTANCES*SPARK_WORKER_CORES。
2. Yarn-Client模式
(1)SPARK_EXECUTOR_INSTANCES:在Yarn集群中启动的ExecutorBackend的数目,默认为2个。
(2)SPARK_EXECUTOR_CORES:每个ExecutorBackend所占用的CPU核的数目。
(3)SPARK_EXECUTOR_MEMORY:每个ExecutorBackend所占用的内存大小;
(4)SPARK_DRIVER_MEMORY:Spark应用程序Application的Driver(即Yarn中的ApplicationMaster)运行时所占的内存大小。
3. Yarn-Cluster模式
如果是Yarn-Cluster模式,Executor的数目由spark-submit工具的--num-executors参数指定,默认是2个实例,而每个Executor使用的CPU数目由--executor-cores指定,默认为1核。
说明:
(1)集群Task并行度:SPARK_ EXECUTOR_INSTANCES* SPARK_EXECUTOR_CORES;
(2)集群内存总量:(executor个数) * (SPARK_EXECUTOR_MEMORY+ spark.yarn.executor.memoryOverhead)+(SPARK_DRIVER_MEMORY+spark.yarn.driver.memoryOverhead)。
(3)Spark对Executor和Driver额外添加堆内存大小,Executor端由spark.yarn.executor.memoryOverhead设置,默认值executorMemory * 0.07与384的最大值。Driver端由spark.yarn.driver.memoryOverhead设置,默认值driverMemory * 0.07与384的最大值。
(4)通过调整上述参数,可以提高集群并行度,让系统同时执行的任务更多,那么对于相同的任务,并行度高了,可以减少轮询次数。但是在资源相同的情况,并行度高了,相应的Executor内存就会减少,所以需要根据实际实况协调内存和core。总之,集群调优,具体问题具体分析。