基于CentOS7、Hadoop2.7.7搭建Spark2.4.7、Zookeeper3.6.3并开启spark高可用模式

一. 概述

1. spark的三种部署模式

1.1 Spark on YARN

Spark on Yarn 模式就是将Spark应用程序跑在Yarn集群之上,通过Yarn资源调度将executor启动在container中,从而完成driver端分发给executor的各个任务。将Spark作业跑在Yarn上,首先需要启动Yarn集群,然后通过spark-shell或spark-submit的方式将作业提交到Yarn上运行。Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出。
yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境
采用yarn模式的话,其实就是把spark作为一个客户端提交作业给YARN,实际运行程序的是YARN,就不需要部署多个节点,部署一个节点就可以了

1.2 Standalone (单机模式)

Spark可以通过部署与Yarn的架构类似的框架来提供自己的集群模式,该集群模式的架构设计与HDFS和Yarn大相径庭,都是由一个主节点多个从节点组成,在Spark 的Standalone模式中,主,即为master;从,即为worker.
适合于不太依赖Hadoop的运算环境,或者存储集群和计算集群分离的场景

1.3 High Alailability(高可用)

所谓的高可用是因为当前集群中的 Master 节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个 Master 节点,一旦处于活动状态的 Master发生故障时,由备用 Master 提供服务,保证作业可以继续执行。这里的高可用一般采用Zookeeper作为它的active-standby切换的工具,设置也很简单。一个完整的切换需要1-2分钟的时间,这个时候新提交的作业会受到影响,之前提交到作业不会受到影响

2. 准备工作

这里需要已经安装hadoop集群,如果没有安装请看鄙人写的搭建hadoop集群

2.1 打开虚拟机中

分别打开hadoop01、hadoop02、hadoop03,并使用终端工具连接,这里我使用的为secuerCRT、secuerFX。
这里提供下载地址连接:https://www.aliyundrive.com/s/XNssQD7dHJ1提取码: jtd3
安装破解教程:https://blog.csdn.net/qq_37954088/article/details/86555660
secuerFX需要将破解放到安装目录中,然后打开注册机点击path即可,后面跟前面的工作一致

2.2 下载安装包

需要下载spark2.4.7、zookeeper压缩包
这是镜像下载链接https://archive.apache.org/dist/
找到spark下载版本为spark-2.4.7-bin-hadoop2.7.tgz
找到zookeeper下载版本为apache-zookeeper-3.6.3-bin.tar.gz

2.3 上传

这是我的目录

sudo mkdir -p /opt/export/data # 存放数据类文件
sudo mkdir -p /opt/export/servers # 存放服务类软件
sudo mkdir -p /opt/export/software # 存放安装包文件
利用secuerFX上传到software目录里,方便后面使用

二. 搭建

1. 安装解压

cd ~/opt/export/software 
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz -C /opt/export/servers/
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/export/servers/

2. 修改配置文件

1. spark 中的master 与 worker

Master负责分配资源,在集群启动时,Driver向Master申请资源,Worker负责监控自己节点的内存和CPU等状况,并向Master汇报。
一台机器可以同时作为master和worker节点,其中master节点只有一个,worker节点可以配置几个。
详情概论参考链接:https://blog.csdn.net/hongmofang10/article/details/84587262

2. 配置文件

spark-conf-file
cd ~/opt/export/servers/spark-2.4.7-bin-hadoop2.7/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
#增加以下参数
# java目录
export JAVA_HOME=/opt/export/servers/jdk1.8.0_321
# master主机启动的IP地址  spark主节点
# 因为是配置spark 高可用模式。需要在另一台需改为对应的IP地址 
# 比如在hadoop02配置spark的备用节点.为: export SPARK_MASTER_HOST=hadoop02
export SPARK_MASTER_HOST=hadoop01
# master 启动的WebUI界面端口 默认
export SPARK_MASTER_WEBUI_PORT=8080
# master 启动的端口
export SPARK_MASTER_PORT=7077
# 可用spark shell 读取HDFS 文件
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LD_LIBRARY_PATH=${HADOOP_HOME}/lib/native
# spark HA
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181
-Dspark.deploy.zookeeper.dir=/spark"


#下一个配置文件
cp slaves.template slaves
vi slaves
#删除localhost
#添加    在三个节点都配置worker节点
hadoop01
hadoop02
hadoop03
zookeeper-conf-file
cd ~/opt/export/servers/apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
#修改dataDir   
dataDir=/opt/export/data/zookeeper/data   # 数据存放目录
dataLogDir=/opt/export/data/zookeeper/log   # 日志存放目录
ps: 这些目录需要手动创建
mkdir -p /opt/export/data/zookeeper/data
mkdir -p /opt/export/data/zookeeper/log
#添加
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
#解释
server.A = B:C:D 
A表示这个是第几号服务器
B 是这个服务器的 ip 地址
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader
#再添加 
admin.serverPort=8086
#因为zookeeper内嵌的Jetty容器的`AdminServer`默认端口是8080,与spark、tomcat端口冲突。导致端口被占用,启动报错,这里我们自己修改端口为8086(自己设置),或者不启用改为`false`
#保存文件
#在刚刚配置的dataDir目录中创建myid文件  每个节点的myid不一样,与zoo.cfg 的 A对应, 在分发文件后在进行下面操作
cd /opt/export/data/zookeeper/data
hadoop01 : echo 1 > myid
hadoop02 : echo 2 > myid
hadoop03 : echo 3 > myid

3. 分发文件

# 改名
mv /opt/export/servers/apache-zookeeper-3.6.3-bin /export/servers/zookeeper-3.6.3
mv /opt/export/servers/spark-2.4.7-bin-hadoop2.7 /opt/export/servers/spark-2.4.7

scp -r /opt/export/servers/{zookeeper-3.6.3,spark-2.4.7} hadoop02:/export/servers/
scp -r /opt/export/servers/{zookeeper-3.6.3,spark-2.4.7} hadoop03:/export/servers/

scp -r /opt/export/data/zookeeper/{data,log} hadoop02:/export/data/
scp -r /opt/export/data/zookeeper/{data,log} hadoop03:/export/data/
# 并在hadoop02、hadoop03中创建dataDir目录,创建myid文件
# 写入对应的id值
# 修改spark-env.sh 中的masterIP地址

3. 环境变量

sudo vi /etc/profile
export SPARK_HOME=/opt/export/servers/spark-2.4.7
export ZK_HOME=/opt/export/servers/zookeeper-3.6.3
export PATH=${PATH}:${ZK_HOME}/bin:${SPARK_HOME}/bin
soucer /etc/profile

4.启动

  • 启动zookeeper

    #需要分别在Hadoop01、02、03上启动
    zkServer.sh start
    #查看状态
    zkServer.sh status
    #三台机器共需要出现两个follower(跟随者)、leader(领导者)
    
  • 启动spark

    # hadoop01
    ${SPARK_HOME}/sbin/start-all.sh
    # hadoop02
    ${SPARK_HOME}/sbin/start-master.sh
    
    # spark shell
    ${SPARK_HOME}/bin/spark-shell --master spark://hadoop01:7077
    
  • web端口

    https://192.168.121.134:8080

    https://192.168.121.135:8080

三、测试spark

使用spark计算圆周率

cd ${SPARK_HOME}/
# 计算圆周率  可通过增大最后的数字 10 来计算约趋近于圆周率
bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://hadoop01:7077,hadoop02:7077,hadoop03:7077 --executor-memory 1G --total-executor-cores 1 examples/jars/spark-examples_2.11-2.4.7.jar 10

结果在产生的记录中找

Pi is roughly 3.140691140691141

结合spark与HDFS

使用HDFS中的文件进行单词计算运算

首先启动HDFS

start-dfs.sh

添加数据

cd /opt/export/data/test/
vi words.txt
hello hadoop
hello spark
hell0 itcast

hadoop fs -mkdir -p /test
hadoop fs -put words.txt /test

启动spark shell

${SPARK_HOME}/bin/spark-shell --master spark://hadoop01:7077

在spark shell交互界面编写

scala > sc.textFile("/test/words.txt").flatMap(_.spilt(" ")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String,Int)]=Array((itcast,1),(hello,3),(spark,1),(hadoop,1))
# 退出
scala > quit

你可能感兴趣的:(#,大数据集群搭建,spark,zookeeper)