Spark:部署和standalone配置调优
-
spark可以不进行任何配置,直接运行,这时候spark像一个java程序一样,是直接运行在VM中的。
-
spark还支持提交任务到YARN管理的集群,称为spark on yarn模式。
-
spark还支持Mesos管理的集群,Mesos和YARN一样都是管理集群资源的。
-
另外spark自己提供了一种完整的集群管理模式,就是standalone模式。
这时候spark的运行不依赖于Hadoop YARN,需要配置$SPARK_HOME/conf/slaves
文件指定从节点,然后用$SPARK_HOME/sbin/start-all.sh
启动spark集群管理服务。
standalone模式下
- master
负责整体的分配资源 ,不会进行计算,不用设置很大内存和核心数: - worker
负责从节点的资源分配,创建excutor。 - excutor
负责执行任务。
$SPARK_HOME/conf/spark-env.sh
中配置项
-
SPARK_WORKER_CORES
每个worker能用cpu核心数,不配置默认为此节点所在机器的全部核心数。 -
SPARK_WORKER_MEMORY
每个worker最多能申请的内存 -
SPARK_WORKER_INSTANCES
本台机器能最多能运行的worker数量,默认为1,若设置为大于1则需要多次运行启动worker命令才能启动多个worker,此时每个worker可用最大核心数需要设置,否则若此机器上所有worker申请的核心数大于此机器物理核心数会报错。(据说高版本spark支持一个worker上启动多个executor,那样的话这个选项就没有存在意义了。未测试。)
默认情况,每个机器只有一个worker,提交一个spark应用,最多为每个worker分配一个executor。
每个spark应用最少会独占一个core,若要同时提交多个spark应用,则所有应用占用的cores不能超过worker能申请的所有cores,否则会报错。
spark应用可以在提交时通过--total-executor-cores
参数指定用的总core数量。若不指定则会用光所有剩下的cores。
一个worker运行executor的数量不会超过同时提交的spark应用数量。
spark-submit参数
--executor-memory
每个executor分配内存,若超过worker可用剩余内存则不会提交给此worker,若不可提交给任意worker则报错--driver-memory
--driver-cores
--total-executor-cores
--class
对于spark on yarn模式没有worker,因为是yarn来控制executor的。