Spark可以运行在各种集群管理器上,并通过集群管理器访问集群中的其他机器。
Spark主要有三种集群管理器,如果只是想让spark运行起来,可以采用spark自带的独立集群管理器,采用独立部署的模式;如果是想让Spark部署在其他集群上,各应用共享集群的话,可以采取两种集群管理器:Hadoop Yarn 或 Apache Mesos。
一、独立集群管理器
Spark独立集群管理器提供的在集群上运行应用的简单方法。要使用集群启动脚本,按照以下步骤执行即可:
1、将编译好的Spark发送到集群的其他节点相同的目录下,例如: /home/opt/spark
2、设置集群的主节点和其他机器的SSH免密码登录
3、编辑主节点的conf/slaves文件,添加上所有的工作节点的主机名
4、在主节点上运行sbin/start-all.sh启动集群,可以在http://masternode:8080上看到集群管理界面
5、要停止集群,在主节点上运行 sbin/stop-all.sh
二、Hadoop Yarn
YARN是Hadoop2.0中引入的集群管理器,可以让多中数据处理框架运行在一个共享的资源池上,而且和Hadoop的分布式存储系统(HDFS)安装在同一个物理节点上。所以让Spark运行在配置了YARN的集群上是一个非常好的选择,这样当Spark程序运行在存储节点上的时候可以快速的访问HDFS中的数据。
在Spark中使用YARN的步骤:
1.找到你的Hadoop的配置目录,然后把它设置问环境变量HADOOP_CONF_DIR。
export HADOOP_CONF_DIR="..."
然后采用如下方式提交作业
spark-submit --master yarn yourapp
2、配置资源用量
(1) --executor-memory 设置每个执行器的内存用量
(2)--executor-cores 设置每个执行器进程从YARN中占用的核心数目
(3)--num-wxecutors Spark应用会使用固定数量的执行器节点,默认为2
三、Apache Mesos
Mesos是一个通用的集群管理器,既可以运行分析性负载又可以运行长期运行的服务。
在Mesos上使用Spark,可以采用以下方式:
spark-submit --master mesos://masternode:5050 yourapp
1、Mesos的调度模式
Mesos的调度模式分为两种:粗粒度模式和细粒度模式
粗粒度模式:只Spark会提前为每个执行器分配固定数量的CPU,而且在任务结束前不会释放这些资源。
可以通过设置spark.mesos.coarse为true,开启粗粒度调度模式
细粒度模式(默认):执行器进程占用的CPU核心数会在执行任务的过程中动态变化。
2、配置资源用量
(1) --executor-memory 设置每个执行器的资源
(2) --total-executor-cores 设置应用占用的核心数