环境准备

我这里环境基于

Hadoop环境搭建 MapReduce环境搭建 Hive环境搭建

虚拟机配置也均基于上述环境

Spark集群搭建完毕之后,集群拓扑如下

Spark下载

进入官网下载页面,选择一个版本下载

Downloads | Apache Spark

我这里下载的版本是

spark-3.2.1-bin-without-hadoop.tgz

解压安装包

1
2
tar -zxvf spark-3.2.1-bin-without-hadoop.tgz
mv spark-3.2.1-bin-without-hadoop /opt

配置Spark

进入spark安装目录的conf文件夹下

配置workers

注意在spark 3.x以前版本是slaves文件,现在最新的3.x版本为workers文件

复制workers cp workers.template workers

修改workersvim workers

删除localhost添加如下内容

1
2
3
node1
node2
node3

配置spark-defaults.conf

复制配置文件cp spark-defaults.conf.template spark-defaults.conf

编辑配置文件vim spark-defaults.conf

可以看到这里的example

我们取消部分注释并修改如下

配置spark-env.sh

复制配置文件

cp spark-env.sh.template spark-env.sh

编辑配置文件

vim spark-env.sh

加入以下内容

1
2
3
4
5
6
7
8
9
JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
HADOOP_CONF_DIR=/opt/hadoop-3.1.4/etc/hadoop
SPARK_MASTER_IP=master
SPARK_MASTER_PORT=7077
SPARK_WORKER_MEMORY=512m
SPARK_WORKER_CORES=1
SPARK_WORKER_INSTANCES=1
SPARK_EXECUTOR_MEMORY=512m
SPARK_EXECUTOR_CORES=1

启动Hadoop集群,创建spark-logs目录

hdfs dfs -mkdir /spark-logs

分发到各节点

1
2
3
scp -r /opt/spark-3.2.1-bin-without-hadoop node1:/opt/spark-3.2.1-bin-without-hadoop
scp -r /opt/spark-3.2.1-bin-without-hadoop node2:/opt/spark-3.2.1-bin-without-hadoop
scp -r /opt/spark-3.2.1-bin-without-hadoop node3:/opt/spark-3.2.1-bin-without-hadoop

配置环境变量

1
2
export SPARK_HOME=/opt/spark-3.2.1-bin-without-hadoop
export PATH=$PATH:$SPARK_HOME/bin

启动spark集群

进入spark安装目录的sbin中,使用命令./start-all.sh即可启动spark所有节点

踩坑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Logger
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more

因为我们下载的是without hadoop版本,所以需要手动指明本地的hadoopde 的classpath路径
在spark-env.sh中追加一行
SPARK_DIST_CLASSPATH=$(/opt/hadoop-3.1.4/bin/hadoop classpath)

将配置变更传送到各个节点

1
2
3
scp spark-env.sh node1:/opt/spark-3.2.1-bin-without-hadoop/conf/spark-env.sh
scp spark-env.sh node2:/opt/spark-3.2.1-bin-without-hadoop/conf/spark-env.sh
scp spark-env.sh node3:/opt/spark-3.2.1-bin-without-hadoop/conf/spark-env.sh

参考文章: 【spark】spark-2.4.4的安装与测试 (lagou.com)

启动spark日志服务

在安装目录的sbin文件夹下

使用./start-history-server.sh启动

打开浏览器监控

通过访问master的8080端口,打开浏览器的监控页面
http://192.168.166.100:8080

启动spark-shell