一、Centos7下搭建spark集群 (分布式运算集群 )

1. 首先看一下我的环境拓扑图

sqoop版本 对应 hadoop spark对应hadoop版本_linux


注意:搭建spark集群,spark版本要与hadoop版本匹配。2. 查看hadoop版本,命令:hadoop version

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_02


(1) 官网spark下载地址:https://spark.apache.org/downloads.html

sqoop版本 对应 hadoop spark对应hadoop版本_scala_03


(2) 博主的hadoop为2.7.1版本,所以下载了spark2.4.5版本,可根据你的hadoop版本下载spark对应版本,其他spark版本下载可点击下图箭头所示(下载链接中点开spark版本可查看对应hadoop版本)。下载地址:https://archive.apache.org/dist/spark/

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_04


3. 根据下载的spark,打开压缩包中的jar目录,查看scala版本,博主的是对应scala版本2.11.12

sqoop版本 对应 hadoop spark对应hadoop版本_spark_05


(1)scala官网下载地址:https://www.scala-lang.org/download/

sqoop版本 对应 hadoop spark对应hadoop版本_大数据_06


(2) 点击对应版本后,找到linux版本,可点击下载,也可右击复制地址,使用wget在linux中下载。

sqoop版本 对应 hadoop spark对应hadoop版本_linux_07


4.进入到node2节点的/usr/local目录下,使用命令下载scala

(建议手动下载,不使用命令,上传到node2节点中,速度较快)

进入目录命令:cd /usr/local 下载命令(注意自己的版本连接):wget https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz

(1) 如使用下载命令遇到下方错误(无误可跳过)

sqoop版本 对应 hadoop spark对应hadoop版本_spark_08

ERROR: cannot verify downloads.lightbend.com's certificate, issued by ‘/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Domain Validation Secure Server CA’:
  Unable to locally verify the issuer's authority.
To connect to downloads.lightbend.com insecurely, use `--no-check-certificate'.

原因是:无法建立 SSL 连接。(这里报错是因为总是要先检查网站证书,而这样大多数时候会报错,这个时候加上–no-check-certificate就可以解决问题了)
解决方法,使用命令:wget --no-check-certificate https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz

sqoop版本 对应 hadoop spark对应hadoop版本_scala_09

(2) 下载完成后,解压并配置环境变量
解压命令:tar -xvf scala-2.11.12.tgz 编辑环境变量:vi /etc/profile
保存后刷新环境变量:source /etc/profile

export SCALA_HOME=/usr/local/scala-2.11.12
:$SCALA_HOME/bin

sqoop版本 对应 hadoop spark对应hadoop版本_scala_10


(3) 使用scala命令测试一下
测试命令:scala

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_11

5. 安装并配置 spark到node2
(1) 上传spark到node2节点的/usr/local目录下,解压并配置环境变量
解压命令:tar -xvf spark-2.4.5-bin-hadoop2.7.tgz 重命名命令:mv spark-2.4.5-bin-hadoop2.7 spark245
编辑环境变量:vi /etc/profile
保存后刷新环境变量:source /etc/profile

export SPARK_HOME=/usr/local/spark245
:$SPARK_HOME/bin

sqoop版本 对应 hadoop spark对应hadoop版本_scala_12

(2) 使用spark命令测试一下
测试命令:spark-shell

sqoop版本 对应 hadoop spark对应hadoop版本_linux_13

6. 配置spark集群( 在node2上将node2设为master节点)

(1) 进入spark的conf目录,将spark-env.sh.template文件复制为spark-env.sh文件
进入目录命令:cd /usr/local/spark245/conf/
复制文件命令:cp spark-env.sh.template spark-env.sh
编辑文件 vi spark-env.sh,在spark-env.sh文件内添加下方配置(注意自己的配置地址)

JAVA_HOME=/usr/software/jdk1.8
SCALA_HOME=/usr/local/scala-2.11.12
HADOOP_HOME=/usr/local/hadoop271
HADOOP_CONF_DIR=/usr/local/hadoop271/etc/hadoop
SPARK_MASTER_IP=node2
SPARK_WORKER_MEMORY=512M
export JAVA_HOME SCALA_HOME HADOOP_HOME HADOOP_CONF_DIR SPARK_MASTER_IP SPARK_WORKER_MEMORY

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_14


(2) 复制并重命名slaves.template文件,命令:cp slaves.template slaves 编辑slaves文件,设置node3 4为spark worker,命令:vi slaves

#localhost
node3
node4

sqoop版本 对应 hadoop spark对应hadoop版本_大数据_15

7. 将 node2上配置好的的 scala 同步到 node3, node4中,并配置好环境变量

(1) 先回到安装目录下:cd /usr/local 同步命令:scp -r scala-2.11.12/ root@node3:/usr/local
同步命令:scp -r scala-2.11.12/ root@node4:/usr/local

(2) 修改node3 node4中的环境变量(scala与node2一致):vi /etc/profile (3) 保存后刷新环境变量:source /etc/profile

(4) 在node3 node4中使用scala命令测试一下
测试命令:scala

scala退出命令: :quit

sqoop版本 对应 hadoop spark对应hadoop版本_linux_16

8. 将 node2上配置好的的 spark同步到 node3, node4中,并配置好环境变量

(1) 先回到安装目录下:cd /usr/local 同步命令:scp -r spark245/ root@node3:/usr/local/
同步命令:scp -r spark245/ root@node4:/usr/local/

(2) 修改node3 node4中的环境变量(scala与node2一致):vi /etc/profile (3) 保存后刷新环境变量:source /etc/profile

(4) 在node3 node4中使用spark命令测试一下
测试命令:spark-shell

spark退出命令: :quit

sqoop版本 对应 hadoop spark对应hadoop版本_spark_17


9. 确保 hadoop集群先启动, 再进入到 spark安装目录的 sbin下,使用以下命令启动spark集群

(1) zookeeper启动命令:zkServer.sh start(2) resourcemanager启动命令:yarn-daemon.sh start resourcemanager

(3) hadoop集群启动命令:start-all.sh

(4) 进入spark安装目录的sbin下:cd /usr/local/spark245/sbin/

(5) 启动spark集群:./start-all.sh

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_18


(6) 在node2,3,4上查看进程,应该有以下服务,命令:jps

node2

node3

node4

Master

Worker

Worker

(7) 查看Master的 spark UI地址(本机ip要做映射):http://node2:8080/

10. 结合 hadoop集群完成一个 WordCount练习(可选)

(1) 在 hadoop集群的任一节点上运行以下命令

查看命令:hadoop fs -ls /

sqoop版本 对应 hadoop spark对应hadoop版本_spark_19


创建文件命令:hadoop dfs -mkdir /input

sqoop版本 对应 hadoop spark对应hadoop版本_scala_20


上传文件命令(注意自己hadoop的位置): hadoop fs -put /usr/local/hadoop271/README.txt /input

sqoop版本 对应 hadoop spark对应hadoop版本_scala_21


(2) 在spark集群的master节点( node2 )上运行 spark-shell

指定集群命令:spark-shell --master spark://node2:7077

sqoop版本 对应 hadoop spark对应hadoop版本_linux_22


分片计数命令(注意自己hadoop中active的主节点是哪一个):sc.textFile("hdfs://node2:8020/input/README.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://node2:8020/out_test")

如遇到下面的错误,就是虚拟机的的内存不足,解决方法,给虚拟机节点扩容。
可参考我这篇博客:

WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

sqoop版本 对应 hadoop spark对应hadoop版本_spark_23


分片结束后,可查看hadoop集群上的数据
查看命令:hadoop fs -ls /out_test

查看分片:hadoop fs -cat /out_test/part-0000

二、将spark集群升级成高可用集群(可选步骤)

1. 停止spark master, worker,在spark的sbin目录下运行 ./stop-all.sh

2. 高可用集群拓扑图

sqoop版本 对应 hadoop spark对应hadoop版本_linux_24

3. 将node2中的scala同步到node1上
同步命令:scp -r scala-2.11.12/ root@node1:/usr/local

4. 将node2中的spark同步到node1上
同步命令:scp -r spark245/ root@node1:/usr/local

5. 配置node1节点上的环境变量,跟node2一样 不再赘述

编辑命令:vi /etc/profile 刷新命令:source /etc/profile

sqoop版本 对应 hadoop spark对应hadoop版本_scala_25

6. 修改node1中spark的conf目录下 spark-env.sh 配置文件
进入目录命令:cd /usr/local/spark245/conf/
修改 spark-env.sh 配置文件(注意自己的配置位置):vi spark-env.sh

JAVA_HOME=/usr/software/jdk1.8
SCALA_HOME=/usr/local/scala-2.11.12
HADOOP_HOME=/usr/local/hadoop271
HADOOP_CONF_DIR=/usr/local/hadoop271/etc/hadoop
#SPARK_MASTER_IP=node2
SPARK_WORKER_MEMORY=1g
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark"
export JAVA_HOME SCALA_HOME HADOOP_HOME HADOOP_CONF_DIR SPARK_MASTER_IP SPARK_WORKER_MEMORY

sqoop版本 对应 hadoop spark对应hadoop版本_spark_26


7. 修改node1中spark的conf目录下 slaves配置文件

命令:vi slaves

#localhost
node1
node2
node3
node4

sqoop版本 对应 hadoop spark对应hadoop版本_大数据_27

8. 将node1中的spark-env.sh,slaves 同步到 node2, 3,4,同步命令如下

scp -r spark-env.sh/ root@node2:$PWD
scp -r spark-env.sh/ root@node3:$PWD
scp -r spark-env.sh/ root@node4:$PWD
scp -r slaves root@node2:$PWD
 scp -r slaves root@node3:$PWD
 scp -r slaves root@node4:$PWD

sqoop版本 对应 hadoop spark对应hadoop版本_scala_28


sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_29

9. 在node1的 spark目录下的 sbin 中启动spark集群
命令:./start-all.sh

sqoop版本 对应 hadoop spark对应hadoop版本_scala_30

10. 在node2的 spark目录下的 sbin 中启动spark的master
命令:./start-master.sh

sqoop版本 对应 hadoop spark对应hadoop版本_sqoop版本 对应 hadoop_31

11. 访问高可用集群是否成功启动
node1地址:http://node1:8080

sqoop版本 对应 hadoop spark对应hadoop版本_spark_32


node2地址:http://node2:8080

sqoop版本 对应 hadoop spark对应hadoop版本_spark_33

到这里,spark集群环境就已经搭建完毕,也可再使用上面的WordCount练习测试一下spark高可用集群