一、Centos7下搭建spark集群 (分布式运算集群 )
1. 首先看一下我的环境拓扑图
注意:搭建spark集群,spark版本要与hadoop版本匹配。2. 查看hadoop版本,命令:hadoop version
(1) 官网spark下载地址:https://spark.apache.org/downloads.html
(2) 博主的hadoop为2.7.1版本,所以下载了spark2.4.5版本,可根据你的hadoop版本下载spark对应版本,其他spark版本下载可点击下图箭头所示(下载链接中点开spark版本可查看对应hadoop版本)。下载地址:https://archive.apache.org/dist/spark/
3. 根据下载的spark,打开压缩包中的jar目录,查看scala版本,博主的是对应scala版本2.11.12
(1)scala官网下载地址:https://www.scala-lang.org/download/
(2) 点击对应版本后,找到linux版本,可点击下载,也可右击复制地址,使用wget在linux中下载。
4.进入到node2节点的/usr/local目录下,使用命令下载scala
(建议手动下载,不使用命令,上传到node2节点中,速度较快)
进入目录命令:cd /usr/local
下载命令(注意自己的版本连接):wget https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz
(1) 如使用下载命令遇到下方错误(无误可跳过)
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
(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
(3) 使用scala命令测试一下
测试命令:scala
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
(2) 使用spark命令测试一下
测试命令:spark-shell
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
(2) 复制并重命名slaves.template文件,命令:cp slaves.template slaves
编辑slaves文件,设置node3 4为spark worker,命令:vi slaves
#localhost
node3
node4
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
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
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
(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 /
创建文件命令:hadoop dfs -mkdir /input
上传文件命令(注意自己hadoop的位置): hadoop fs -put /usr/local/hadoop271/README.txt /input
(2) 在spark集群的master节点( node2 )上运行 spark-shell
指定集群命令:spark-shell --master spark://node2:7077
分片计数命令(注意自己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
分片结束后,可查看hadoop集群上的数据
查看命令:hadoop fs -ls /out_test
查看分片:hadoop fs -cat /out_test/part-0000
二、将spark集群升级成高可用集群(可选步骤)
1. 停止spark master, worker,在spark的sbin目录下运行 ./stop-all.sh
2. 高可用集群拓扑图
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
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
7. 修改node1中spark的conf目录下 slaves配置文件
命令:vi slaves
#localhost
node1
node2
node3
node4
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
9. 在node1的 spark目录下的 sbin 中启动spark集群
命令:./start-all.sh
10. 在node2的 spark目录下的 sbin 中启动spark的master
命令:./start-master.sh
11. 访问高可用集群是否成功启动
node1地址:http://node1:8080
node2地址:http://node2:8080
到这里,spark集群环境就已经搭建完毕,也可再使用上面的WordCount练习测试一下spark高可用集群