Spark Standalone集群部署

集群管理器

spark集群和Hadoop集群类似,采取主从结构,有两类节点:

集群管理者

Master节点(也叫驱动器(Driver)节点)。Master负责集群资源管理,接收spark job并分布到各个计算节点上进行计算。在集群中起到支配作用。一个集群中,活跃的Master只能有一个(HA部署下,可能有多个在热备)!

在Spark集群中,Master节点负责执行org.apache.spark.deploy.master.Master进程。Master会消耗少量内存,总体而言,对服务器性能要求不高。

集群工作者

Slave节点(也叫执行器(Executor)节点)。计算节点,负责执行计算任务,即实际的分布式计算,并将结果反馈给Master,由Master反馈给spark job调用者。Slave一般支持横向拓展,个数不限!

在Spark集群中,Slave节点负责执行

在Spark集群中,Slave节点负责执行org.apache.spark.deploy.worker.Worker进程。对Worker进程而言,CPU和内存分配越多越好!

Spark支持多种类型的集群管理器

Spark可以运行在多种集群管理器上,并通过集群管理器访问集群中的机器。这些集群管理器通常分为两大类:

独立集群管理器

集群中有一台Spark Master服务器,所有的Spark Slave服从Spark Master的管理。此时Spark Master就是集群管理器。Spark Master是Spark自带的集群管理器。

这种模式下,Spark集群的运行、管理、计算只依赖于Spark本身,不依赖于任何外部集群(可能Spark Master的HA依赖于Zookeeper)。

这种模式的Spark集群是单纯的Spark集群,其使用的计算数据多来自于本地磁盘文件系统(也可以在此模式下访问HDFS,不过此时要格外注意:Spark Slave节点需尽量靠近DataNode,避免过度的网络数据传输)。

共享集群管理器

Spark集群运行于其他集群的基础上。在这种集群中,Spark集群的管理就依赖于其他集群(如Hadoop YARN、Apache Mesos)。此时可以将Spark看作其他集群下的分布式应用层。

例如将Spark运行在YARN上,Spark集群此时就服从YARN的管理和调度,它可以让Spark在存储数据的物理节点上运行,以快速访问HDFS中的数据。

Spark集群部署

只有在Spark Standalone(独立集群管理器)模式下才需要事先部署集群。共享集群管理器时,由于Spark集群是由其他集群管理器(例如YARN)管理的,所以不需要单独再部署Spark集群,只需要在spark-submit --master yarn提交任务的时候,指定集群相关信息(如果环境变量HADOOP_CONF_DIR有效的话,会直接读HADOOP_CONF_DIR下hadoop集群相关信息)即可。

驱动器程序及其运行方式

驱动器程序

我们所编写的spark程序就是驱动器程序。驱动器程序包含一个main函数作为整个程序入口,通过一个SparkContext对象来访问Spark。

每个Spark应用都由一个驱动器程序来发起集群上的各种集群运算。SparkContext对象可以看作对Spark集群的一个连接。一旦获取了这个SparkContext对象,就可以通过它创建RDD,并在RDD上做各种转换/行动操作。这些计算任务在实际执行时,会被驱动器程序分发送到各个Spark计算节点(Salve节点)完成,然后在驱动器程序进行汇总,得到最终结果。

连接集群的方式

服务器模式:如果是独立Spark集群,那么Spark里面集群管理器就是Spark Master节点,两者是等同的。如果是共享集群,那么YARN会指定一个YARN节点(工作节点)作为Spark Master节点,运行org.apache.spark.deploy.master.Master进程,承担Spark集群的Master角色。不管怎么样,Spark集群里面必须由一个Spark Master节点,运行org.apache.spark.deploy.master.Master进程。服务器模式下,驱动器程序会被传输到Spark Master节点上,并运行在org.apache.spark.deploy.master.Master进程内部。这是生产环境常用的方式。

客户端模式:与服务器模式类似,集群中总有一个运行org.apache.spark.deploy.master.Master进程的节点,承担Spark集群的Master角色。但是此时驱动器程序是在本地运行(即运行spark-submit命令的机器),而非org.apache.spark.deploy.master.Master进程内部。驱动器程序可以运行在你的个人笔记本上,他通过与Spark Master节点(进程)通信,将计算任务分布到集群上。

spark-submit命令可以通过--deploy-mode参数指定运行方式,默认是客户端模式。

部署Spark Standalone集群

1、网络划分

192.168.186.241    sparkmaster
192.168.186.240    sparkslave1
192.168.186.237    sparkslave2
192.168.186.242    sparkslave3

2、修改各节点的/etc/hosts、/etc/hostname

$ sudo gedit /etc/hostname
sparkmaster
sparkslave1
sparkslave2
sparkslave3

$ sudo gedit /etc/hosts
192.168.186.241    sparkmaster
192.168.186.240    sparkslave1
192.168.186.237    sparkslave2
192.168.186.242    sparkslave3

安装ssh,使master可以免密登陆各个salve

####在master上
$ sudo apt-get install openssh-server
$ ssh-keygen -t rsa -N ""
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@sparkmaster
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@sparkslave1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@sparkslave2
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@sparkslave3

3、在所有机器上下载、安装java环境,spark环境

$ gedit ~/.bashrc
export JAVA_HOME=/mnt/hgfs/java-env/jdk1.8.0_211
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
$ source ~/.bashrc
$ java -version
$ javac -version

$ tar xzf /mnt/hgfs/spark-cluster-env/spark-2.4.3-bin-hadoop2.7.tgz
$ gedit ~/.bashrc
export SPARK_HOME=/mnt/hgfs/spark-cluster-env/spark-2.4.3-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
$ source ~/.bashrc

4、配置spark(所有机器配置都用一样,所以可以用同一份配置)

$ cp $SPARK_HOME/conf/slaves.template $SPARK_HOME/conf/slaves
$ gedit $SPARK_HOME/conf/slaves
sparkslave1
sparkslave2
sparkslave3
$ cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
$ gedit $SPARK_HOME/conf/spark-env.sh
export JAVA_HOME=/mnt/hgfs/java-env/jdk1.8.0_211
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/data/spark/recoveryDirectory"
export SPARK_MASTER_IP=sparkmaster 
export SPARK_MASTER_PORT=7077

####all workers
$ sudo systemctl stop firewalld.service
$ sudo systemctl disable firewalld.service

5、启动集群

$ rm -rf $SPARK_HOME/logs/
$ rm -rf /tmp
$ rm -rf /data/spark/recoveryDirectory/
$ start-all.sh
#### http://sparkmaster:8080
#### if on worker ----> ERROR Worker: All masters are unresponsive! Giving up.
#export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/data/spark/recoveryDirectory"

6、访问web ui

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值