本文介绍的是高可用Spark环境的部署。
一、准备工作
- JAVA8环境
- Zookeeper环境
- hadoop(2.7.7)环境
- 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"
注:
- 如果配置在~/.bashrc或超级用户模式下配置/etc/profile过全局环境,JAVA_HOME、HADOOP_HOME可以在配置文件中进行配置。
- 变量环境说明:
- 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*