本文介绍的是高可用Spark环境的部署。

一、准备工作

  1. JAVA8环境
  2. Zookeeper环境
  3. hadoop(2.7.7)环境
  4. scala语言环境

二、安装Spark

如果完成了准备工作,我们就可以开始安装Spark(HA)环境。

2.1 下载spark

因为我的Hadoop环境安装2.7.7版本的,所以Spark版本就要需要选择支持Hadoop2.7以上版本的Saprk,我下载的spark-2.4.0-bin-hadoop2.7.tgz的这个版本

2.2 配置文件

2.2.1 配置spark-env.sh

步骤一:复杂spark-env.sh.template模板并全名为spark-env.sh

cp /{spark}/conf/spark-env.sh.template /{spark}/conf/spark-env.sh

步骤二:在文件中配置以下参数

vi /{spark}/conf/spark-env.sh

//JDK位置
export JAVA_HOME=/opt/java/jdk8
//scala位置
export SCALA_HOME=/opt/scala
//hadoop位置
export HADOOP_HOME=/opt/hadoop
//hadoop配置位置
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
//工作内容数
export SPARK_WORKER_MEMORY=500m
//工作CPU核心数
export SPARK_WORKER_CORES=1
//变量环境
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=ServerMaster:2181,ServerSlaveOne:2181,ServerSlaveTwo:2181 -Dspark.deploy.zookeeper.dir=/spark"

  1. 如果配置在~/.bashrc或超级用户模式下配置/etc/profile过全局环境,JAVA_HOME、HADOOP_HOME可以在配置文件中进行配置。
  2. 变量环境说明:
  • Dspark.deploy.recoveryMode=ZOOKEEPER #说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper来维护的。就是说用zookeeper做了spark的HA配置,Master(Active)挂掉的话,Master(standby)要想变成Master(Active)的话,Master(Standby)就要像zookeeper读取整个集群状态信息,然后进行恢复所有Worker和Driver的状态信息,和所有的Application状态信息;
  • Dspark.deploy.zookeeper.url=ServerMaster:2181,ServerSlaveOne:2181,ServerSlaveTwo:2181#将所有配置了zookeeper,并且在这台机器上有可能做master(Active)的机器都配置进来;(我用了4台,就配置了4台)
  • Dspark.deploy.zookeeper.dir=/spark 保存spark的元数据,保存了spark的作业运行状态; zookeeper会保存spark集群的所有的状态信息,包括所有的Workers信息,所有的Applactions信息,所有的Driver信息,如果集群

2.2.2 配置slaves

步骤一:复杂slaves.template模板并全名为slaves

cp /{spark}/conf/slaves.template /{spark}/conf/slaves

步骤二:在文件中配置以下参数,参数为集群中包含的服务器

vi /{spark}/conf/slaves

ServerMaster
ServerSlaveOne
ServerSlaveTWo

2.3 将配置好的安装包分发到各个节点

使用“scp”命令将配置好的安装包分发到各个节点。

三、配置环境变量

步骤一 在所有节点中的~/.bashrc或超级用户模式下配置/etc/profile中配置

export SPARK_HOME=/home/hadoop/apps/spark
export PATH=$PATH:$SPARK_HOME/bin

步骤二 使其生效

source ~/.bashrc 
或
source /etc/profile

四、启动Spark

步骤一、在任务一个节点启动Spark,命令如下:

/{spark}/sbin/start-all.sh

步骤二、启用Spark master服务 通过JPS查看进程,我们发现只有在使用"/{spark}/sbin/start-all.sh"的命令启动的节点上才有Master进程,我们在其他节点手工启动Masetr,命令为:

/{spark}/sbin/start-master.sh

五、一个简单的例子

启动成功以后,我们通过一个简单WordCount的例子来验证下

步骤一、本地创建一个文件名为“word.txt”的TXT文件,内容为:

hello world
hello boy
hello girl
hello child

步骤二、将“word.txt”上传到HDFS上,命令为

hadoop fs -put /{本地路径}/word.txt /{HDFS}

步骤三、统计文件中的单词出现个数:

使用saprk-shell命令后,编写程序:

sc.textFile("/{HDFS}/word.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/{HDFS}/output")

步骤四、查看结果:

hadoop fs -cat  /{HDFS}/output/part*