解锁spark各种部署方式
?号外,号外!坏蛋哥又更新文章了,时隔几天,终于有空写分享文章了,前段时间因为阅读spark相关论文,没能及时更新,首先给小伙伴们说声抱歉。话不多说,开始今天的分享,今天坏蛋哥分享的是spark的部署方式,相信你跟着坏蛋哥的脚步来,即使是小白也能搭建成功。
画重点了-->spark有三种启动方式,分别对应的是:
1. local 本机启动方式,根据设置线程数来决定executor(后面会介绍这个角色)的个数 2. stonealone 即用spark自带的分布式运算框架 3. yarn 基于yarn的运行框架
1 spark单机搭建
如果是单机,因为spark本生就有资源管理的功能,所以将spark包解压就可以直接运行spark-shell 来运行spark的scala脚本。(如果需要坏蛋哥搭建所用的spark安装包,后台回复【spark安装】即可获得哦)
注:如果是不同的安装包,将命令中的版本号换成你所对应的即可。
1.解压
#创建指定的文件夹mkdir /usr/spark#解压tar -zxvf tar -zxvf spark-2.4.5-bin-hadoop2.6.tgz -C /usr/spark#更名mv spark-2.4.5-bin-hadoop2.6 spark
测试
#用spark自带的环境测试bin/spark-submit \--class org.apache.spark.examples.SparkPi \--executor-memory 1G \--total-executor-cores 2 \./examples/jars/spark-examples_2.11-2.4.5.jar \ #注:上面需要根据自己的版本号进行更换100
shell脚本启动单机环境
shell脚本启动是启动的scala和python的交互脚本,所以要玩spark的小伙伴最好要学习一下scala,记得有这样一个比喻,说:spark的处理能力就像孙悟空一样强大,那么scala就是孙悟空手中的金箍棒。可见scala对于spark的重要性。
#如果配置了环境变量,那么直接就可以运行,如果没有配,那么需要将spark的安装路径配置到环境变量中。spark-sheel local[*]# local[ ]代表在本地环境下启动的线程数,可以理解每个线程充当一个slave。# local[1] 代表启动一个线程,local[2]代表启动两个线程。# local[*]代表以机器的内核数作为启动线程数,如果你的cpu是四核,那么就是启动四个线程。
2. spark集群搭建
spark一般是使用基于yarn的方式进行部署,yarn部署方式难度也更大,如果能部署到yarn上,那部署stonealone就是小菜一碟的事情了(stonealone部署就是不配置zookeeper集群)。本例是基于zookeeper的高可用yarn集群的搭建。解释一下高可用(HIGH AVAILABLE),就是当管理机宕机后仍然能重新选举,然后让集群正常使用。废话少说,咱们直接开始。
yarn的安装可以参考坏蛋哥之前写的hadoop环境(hadoop自带yarn)搭建进行部署。hadoop环境搭建(详解)
2.1 zookeeper集群搭建
#解压缩文件mkdir /usr/zookeepertar -zvxf zookeeper-3.4.14.tar.gz -C /usr/zookeepermv zookeeper-3.4.14 zookeeper#配置zookeeper环境变量export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper/export PATH=$PATH:/$ZOOKEEPER_HOME/bin/#配置参数cp zoo_sample.cfg zoo.cfg#具体参数# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/usr/zookeeper/datadataLogDir=/usr/zookeeper/log# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里# 指名集群间通讯端口和选举端口server.1=hadoop001:2287:3387 #hadoop001,002,003换成对应ip地址server.2=hadoop002:2287:3387server.3=hadoop003:2287:3387
配置参数说明:
tickTime:用于计算的基础时间单元。比如 session 超时:N*tickTime;
initLimit:用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示;
syncLimit:用于集群, master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制);
dataDir:数据存储位置;
dataLogDir:日志目录;
clientPort:用于客户端连接的端口,默认 2181
给zookeeper每个主机添加唯一ID:
#用scp分发配置,并分别在三台主机的 dataDir 目录下新建 myid 文件,并写入对应的节点标识。Zookeeper 集群通过 myid 文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,选举出 Leader 节点。# 三台主机均执行该命令mkdir -vp /usr/zookeeper/data/创建并写入节点标识到 myid 文件:# hadoopmater主机echo "1" > /usr/zookeeper/data/myid# hadoop1主机echo "2" > /usr/zookeeper/data/myid# hadoop2主机echo "3" > /usr/zookeeper/data/myid
启动集群并验证:
#分别在三台主机上,执行如下命令启动服务:zkServer.sh start#验证zkServer.sh status #查看集群各个节点状态
2.2 spark集群部署
解压和环境变量配置:
#首先是解压包和配置环境 tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz -C /urs/spark #配环境 vim /etc/profile export SPARK_HOME=/usr/usr/spark-2.2.3-bin-hadoop2.6export PATH=${SPARK_HOME}/bin:$PATHsource /etc/profile#配置相关配置文件#1.spark-env.sh 在spark的安装目录下的conf目录中 cp spark-env.sh.template spark-env.sh# 配置JDK安装位置JAVA_HOME=/usr/java/jdk1.8# 配置hadoop配置文件的位置HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.6.0-cdh5.15.2/etc/hadoop# 配置zookeeper地址,如果不是基于yarn那么下面的注释可以注释掉SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop001:2181,hadoop002:2181,hadoop003:2181
配置slaves(即配置所有的worker)
cp slaves.template slaves#添加hadoop002hadoop003#分发包scp -r /usr/spark/spark-2.4.0-bin-hadoop2.6/ hadoop1:usr/spark/scp -r /usr/spark/spark-2.4.0-bin-hadoop2.6/ hadoop2:usr/spark/
启动集群,首先启动zookeeper,然后启动hadoop,最后启动spark
#每台主机都需要执行下面的语句启动zookeeperzkServer.sh start#启动hadoop,在master中启动脚本# 启动dfs服务start-dfs.sh# 启动yarn服务start-yarn.sh#启动spark#进入 hadoop001 的 ${SPARK_HOME}/sbin 目录下,执行下面命令启动集群。执行命令后,会在 hadoop001 上启动 Maser 服务,会在 slaves 配置文件中配置的所有节点上启动 Worker 服务。start-all.sh#分别在 hadoop002 和 hadoop003 上执行下面的命令,启动备用的 Master 服务:# ${SPARK_HOME}/sbin 下执行start-master.sh
查看服务是否打开成功:
查看 Spark 的 Web-UI 页面,端口为 8080
。此时可以看到 hadoop001 上的 Master 节点处于 ALIVE
状态,并有 3 个可用的 Worker
节点。
而 hadoop002 和 hadoop003 上的 Master 节点均处于 STANDBY
状态,没有可用的 Worker
节点。
验证高可用性:
此时可以使用 kill
命令杀死 hadoop001 上的 Master
进程,此时备用 Master
会中会有一个再次成为 主 Master
,我这里是 hadoop002,可以看到 hadoop2 上的 Master
经过 RECOVERING
后成为了新的主 Master
,并且获得了全部可以用的 Workers
。
Hadoop002 上的 Master
成为主 Master
,并获得了全部可以用的 Workers
。
此时如果你再在 hadoop001 上使用 start-master.sh
启动 Master 服务,那么其会作为备用 Master
存在。
在集群中跑测试代码:
#和单机环境下的提交到 Yarn 上的命令完全一致,这里以 Spark 内置的计算 Pi 的样例程序为例,提交命令如下:spark-submit \--class org.apache.spark.examples.SparkPi \--master yarn \--deploy-mode client \--executor-memory 1G \--num-executors 10 \/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \100
精彩文章推荐:
一个三本生考研心得
动态规划(二)之打家劫舍
大数据组件-Flume
hadoop环境搭建(详解)
Hadoop实践学习(一)
hadoop实战(二)
读大学了吗,怎么读才有意义
........
如果你也喜欢坏蛋哥的内容记得点赞加关注哦!自满和自卑是学习最大的阻碍,咱们下期见。