Spark Standalone 全分不模式:既真正的集群模式,master和worker部署在不同的节点之上,一般至少需要3个节点(一个master和两个worker),需要三台主机,slave,slave1,slave2(slave是master节点,slave1,slave2是worker节点)。
一、前期准备
1. 准备好scala,hadoop 压缩包
scala-2.11.8.tgz
spark-2.4.8-bin-hadoop2.7.tgz
下载地址链接: https://pan.baidu.com/s/1mzIWCzozmSfgV3meUn1acQ?pwd=rrkx
提取码: rrkx
2 准备三台虚拟机(至少三台)
注:这里的三台主机名称分别是
HadoopMaster(master节点)
HadoopSlave01(worker节点)
HadoopSlave02 (worker节点)
3. 分别在三台虚拟机上安装好jdk
如果jdk没有配置好的可以参考这篇博客
https://editor.csdn.net/md/?articleId=126587725
注:这里三台主机都要分别配置好JDK。
4. hadoop 分布式集群
如果没有配置好hadoop分布式集群的话可以参考这篇博客
https://editor.csdn.net/md/?articleId=127031634
5. 将准备好的scala和spark压缩包上传到HadoopMaster主机上,(这里我是创建了一个software文件,我将两个包上传到这个目录下)
二、安装scala
1.将scala-2.11.8.tgz 解压
tar -zxvf scala_2.11.8.tgz
2. 将HadoopMaster节点上刚解压的 scala发送到从节点HadoopSlave01和HadoopSlave02
scp -r scala-2.11.8 hadoop@HadoopSlaveo1:~/software/
scp -r scala-2.11.8 hadoop@HadoopSlaveo1:~/software/
3. 配置环境变量。在/etc/profile文件添加如下代码(注意:三个主机上都要编写该内容)
export SCALA_HOME=/home/hadoop/software/scala-2.11.8
export PATH=${SCALA_HOME}/bin:$PATH
#这里的/home/hadoop/software/scala-2.11.8是你scala解压之后的路径
4. 使profile文件生效(这里也是三个主机上都要执行该命令)
source /etc/profile
5. 之后分别在每一台主机上都执行 scala -version 查看版本信息,出现版本信息,则表示scala安装成功
三、安装spark
1. 解压spark-2.4.8-bin-hadoop2.7.tgz
tar -zxvf spark-2.4.8-bin-hadoop2.7.tgz
2. 备份spark-env.sh.tempalte, slaves.template
cd spark-2.4.8-bin-hadoop2.7/conf
cp spark-env.sh.tempalte spark-env.sh
cp slaves.template slaves
#复制 spark-env.sh.tempalte文件并重命名为 spark-env.sh
#复制 slaves.tempalte文件并重命名为slaves
3. 修改saprk-env.sh 文件
vi spark-env.sh
#在文件中添加如下内容
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_171
SPARK_MASTER_ IP=HadoopMaster
SPARK_.MASTER_PORT=7077
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2g
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_INSTANCES=1
4. 编写slaves文件
vi slaves
#在文件中添加另外两台从节点的主机名字,此处为HadoopSlave01,HadoopSlave02
#在添加的时候要先把文件里的localhost删除或者注销
HadoopSlave01
HadoopSlave02
5.将HadoopMaster上配配置好的Spark安装目录分别复制给两个从节点HadoopSlave01,HadoopSlave02
scp -r spark-2.4.8-bin-hadoop2.7 hadoop@HadoopSlaveo1:~/software/
scp -r spark-2.4.8-bin-hadoop2.7 hadoop@HadoopSlaveo2:~/software/
6. 配置spark的环境变量(注意:这里三台主机都分别要配置)
vi /etc/profile
#在profile下添加如下内容
export SPARK_HOME=/home/hadoop/software/spark-2.4.8-bin-hadoop2.7
export PATH=${SPARK_HOME}/bin:$PATH
#这里的SPARK_HOME后边接的是spark解压之后存放的路径,此处为/home/hadoop/software/spark-2.4.8-bin-hadoop2.7
7. 都配置好以后,使profile文件生效(这里也是三个主机上都要执行该命令)
source /etc/profile
8. spark就配置好了,再主节点HadoopMaster启动spark全分布式(注在启动之前要先启动好hadoop集群)
sbin/start-all.sh
#注意这里要在spark-2.4.8-bin-hadoop2.7的路径下启动
出现下图所示 内容就算启动成功了。
9. 现在检查是否部署成功
#分别在三台主机上查看进程
jps #查看进程
#若master节点有Master进程,从节点有worker进程,则说明配置成功
10. 访问8080端口:http://ip:8080 (这里是192.168.195.184:8080)
四、问题总结
在部署spark分布的时候,中途遇见了很多问题,总结一下
1.启动了spark分布之后没有master,worker进程
在启动spark的时候,启动了start-all.sh ,启动过程也没有问题,但是jps 查看的时候master节点没有master进程,worke节点没有worker进程,一开始我以为是自己配置文件的时候哪里配置错了,但是检查了一遍之后没有发现哪里有问了,看了很多资料,最后才发现启动spark的时候路径错了,我以为start-all.sh就能够启动所有集群,但是在这里启动spark分布的时候,要在spark目录下执行 sbin/start-all.sh 才行
2. 启动spark集群的时候提示“main” java.lang.UnsupportedClassVersionError:org/apache/spark/launcher/Main:Unsupported major.mior version 52.0
- 在启动spark 集群的时候即使jdk错误,但是java -version查看jdk的时候,是有自己安装的jdk版本信息的,也就是jdk环境变量配置是没有问题的。然后我又以为是我安装的jdk的版本问题,但是我三台主机都用的是同一个版本的jdk,然而HadoopMaser(主节点),HadoopSlave01(worker)能够启动成功,那就不是jdk版本的问题。
- 然后我尝试在spark-env.sh 文件里边添加JDK的环境变量,在吧三台主机的日志里边的文件给删除之后。从新启动spark集群就成功了。
cd spark-2.4.8-bin-hadoop2.7/logs/
rm -rf * #删除logs下的所有日志文件
#这里三台主机的日志文件都有删除
sbin/stop-all.sh #在HadoopMaster(master节点)关闭spark集群
cd spark-2.4.8-bin-hadoop2.7/conf/
vi spark-env.sh
#在文件中添加jdk的环境变量(三台主机都要分别添加)
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_171
#这里建议吧scala,hadoop,spark,的环境变量也给加上
export SCALA_HOME=/home/hadoop/software/scala-2. 11.8
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_ 171
export Hadoop_INSTALL=/home/hadoop/software/hadoop-3.3.0
export HADOOP_CONF_ DIR=$Hadoop_INSTALL/etc/hadoop
export SPARK_LOCAL_DIRS=/home/hadoop/software/spark-2.4.8-bin-hadoop2.7
export SPARK_LOCAL_DIRS=/home/hadoop/software/spark-2.4.8-bin-hadoop2. 7
#这里路径对应改为自己的文件路径即可
#三台主机都分别添加好了之后,从新启动spark集群就可以了
cd spark-2.4.8-bin-hadoop2.7
sbin/start-all.sh
3. 访问sparkUI界面时出现无法访问此网站,ip拒绝了连接请求
- 在部署好hadoop的时候,访问sparkUI界面时出现无法王文此网站,ip拒绝了连接请求。一开始我以为是我的ip错误了,或者是master节点的ip和windows下电脑的ip不再同一个网段导致的。但是在检查之后发现ip没有错,也是和本机的ip在同一个网段的。后来看了很多博客之后都没有用。然后就只好静下心来找问题。
- 之后我查看了master节点的日志,终于发现了问题。如下图,日志中提示MatserUI on port 8888。我才反应过来,我在配置shark-env.sh文件的时候,SPARK_MASTER_WEBUI=8888.
- 从新访问sparkweb界面:192.168.141.184://8888 (吧8080换成8888,因为我配置的spark访问webUI的端口号是8888) 就可以了
4. 启动saprk-shell 的时候提示无法分配内存或spark-shel:44:6983 以杀死
- 在启动saprk-shell内存的时候户提示无法分配内存或以杀死,这是因为虚拟机内存不足导致的,我看一些文章说的是吧每台虚拟机的内存改为2G即可,但是我看了自己的虚拟机,原本就是2G。
- 后来我进入了spark-env.sh 把SPARK_WORKER_MEMORY=2g注释掉(注意,每台主机都要去注释掉)然后我是吧三台主机全部重启了,重新启动hadoop集群,启动saprk集群,之后再sprak-shell 之后就可以了。这里注释掉之后应该不用重启也是可以的,我不知道注释掉SPARK_WORKER_MEMORY=2g注释掉之后不重新启动可不可以,可以试一下。还有一种方法不注释掉SPARK_WORKER_MEMORY=2g也可以,把它改小一点就可以了。我没有试过,我看很多文章也是这样说的,应该是可以的,感兴趣的可以试一下。
- 修改之后从新启动就成功了。
本篇文章就到这里了,这些都是自己平时遇到的问题或者自己用到的东西,然后就整理了一下,能帮助到你,若有不对或这描述不清楚的地方请指正。😁😁✌✌