Spark集群的搭建

Spark集群介绍

Spark的运行模式分为:

  • local(本地模式)
  • Spark on Standalone
  • Spark on yarn
  • Spark on mesos。

其中Standalone集群是Spark的框架自己实现的资源任务管理集群,所以今天我们介绍一下Standalone集群的搭建。

Spark Standalone

  1. 首先,去spark官网下载spark安装包Spark集群的搭建_第1张图片
    笔者这次使用的是spark1.6.3、Hadoop2.6版本的jar包

  2. 下载完成后,把jar包发送到服务器上进行解压,然后把解压后的文件夹名称改为spark1.6.3.

  3. 进入conf目录

  • 修改slave.template->slave(这里是配置Woker所在节点位置)
    加入如下配置
node02
node03
node04
  • 修改spark-env.sh.template->spark-env.sh
    加入如下配置
SPARK_MASTER_IP=node01
SPARK_MASTER_PORT=7077
SPARK_WORKER_MEMORY=2G
SPARK_WORKER_INSTANCES=1
SPARK_WORKER_DIR=/自定义目录
  1. 将配置好的安装包发送到其它节点
  2. 这里需要注意一下,spark的启动命令是 start-all.sh,需要将其改为 start-spark.sh,或者以版本号来命名:start-1.6.3.sh,关闭命令亦然防止和Hadoop集群的启动命令发生冲突
mv start-all.sh start-spark.sh 
mv stop-all.sh  stop-spark.sh  
  1. 将配置好的文件夹发送到其他节点
[root@node01 zgl]# scp -r spark-1.6.3 node02:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 node03:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 node04:`pwd`
[root@node01 zgl]# scp -r spark-1.6.3 client:`pwd`
  1. 配置Spark环境变量
  2. 在Master节点启动集群(node01)
start-spark.sh
  1. jps检查进程是否启动,在node01有一个Master进程,其它从节点分别有一个Worker进程 也可以进Web UI界面查看http://node01:8080
    Spark集群的搭建_第2张图片
  2. 提交Application到集群中运行,这里以SparkPi为例
spark-submit --master spark://node01:7077 --class org.apache.spark.examples.SparkPi /opt/software/spark1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar 100(100是传递的参数)
  1. 提交之后可以进第9步Web UI查看任务进度,这里不再赘述

Spark Standalone HA

在Standalone集群中也有像HDFS、Yarn一样的高可用机制,在主节点Master挂掉之后,会有一台备用的节点来接管工作,维持集群的正常运行。
同样,Standalone集群也是基于Zookeeper集群来实现的高可用,和hdfs不同的是,Standalone HA中的元数据存储在Zookeeper集群中,通过spark-env.sh中的spark.deploy.zookeeper.dir来配置元数据的存储位置。

集群搭建:

  1. 在spark-env.sh文件中添加如下配置,注意不要手动换行
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node02:2181,node03:2181,node04:2181 -Dspark.deploy.zookeeper.dir=/spark"
  1. 将修改后的spark-env.sh发到其他节点的相同目录下
  2. 启动Zookeeper集群
  3. 在 node01节点启动集群
start-spark.sh
  1. 在node02启动备用Master
start-master.sh
  1. 至此,高可用的Standalone集群就搭建完成了,可以在Web UI中查看备用的Master的状态:node02:8080

注意:

这里有个很重要的点,在Spark集群中提交完任务之后,如果把active状态的Master节点进程kill掉,正在执行的任务并不会受到影响,这是因为任务在执行之前已经向Master申请过资源了,任务执行过程中的通讯主要在driver和各个Executor之间,所以主备切换并不会影响任务的执行。

Spark on Yarn

Spark任务在yarn集群中运行的话,只需要提交Spark任务的节点配置好,就可以把任务提交到yarn中运行。

配置

  1. 在客户端的spark-env.sh文件中添加如下配置信息,spark就会去这个位置寻找 hadoop 的配置文件,获取 yarn 集群的信息
HADOOP_CONF_DIR=/opt/zgl/hadoop-2.6.5/etc/hadoop
  1. 开启yarn集群和hdfs,client会把提交的应用程序 jar 包托管在 hdfs 上
  2. 提交任务有两种方式,一种是client,一种是cluster,前者driver进程会在本地启动,后者的driver由主节点随机启动的。
spark-submit --master yarn --class org.apache.spark.examples.SparkPi  /opt/software/spark-1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar  10000

注意

提交任务可能会报下面这个异常,主要是因为虚拟内存超限, contrainer 被 kill,从而导致任务被迫停止

Yarn application has already ended! It might have been killed or unable to launch application master

可以通过在 hadoop 安装包的 yarn-site.xml 文件中配置如下信息来解决


    yarn.nodemanager.pmem-check-enabled
    false
    是否检查每个任务正使用的物理内存量,如果超过默认值则将其杀死,默认是true 


    yarn.nodemanager.vmem-check-enabled
    false
    Whether virtual memory limits will be enforced for containers

你可能感兴趣的:(大数据学习)