Spark独立集群安装

Spark独立集群安装

  • 配置并启动Spark集群
    • 配置免密登录
    • 配置环境变量
    • 配置workers
    • 配置spark-default.conf
    • 配置spark-env.sh
    • 启动Spark独立集群
  • 使用spark-submit提交代码
  • Spark History Server

Spark独立集群的安装,至少需要3台服务器,在安装Spark之前准备好3台服务器,服务器的主机名及IP地址分别是:node1(10.0.0.5)、node2(10.0.0.6)、node3(10.0.0.7),每台服务器都需要按统一规划安装好Java、Python、Spark软件包,基础环境的准备可参考 Spark安装环境准备,Spark软件的安装可参考 Spark本地模式安装。

配置并启动Spark集群

Spark软件安装好以后,每台服务器节点上的Spark软件都是独立的,还未组成集群,需要对其进行配置让所有节点组合成Spark集群,Spark的配置文件全部存放在安装路径的conf目录下。确保Spark的配置信息在所有节点上都是一样的,可以在每个节点上分别修改配置文件,也可以在一个节点上修改好配置文件后复制到其他节点。

配置免密登录

在集群模式下,由于是多台服务器共同协作,需要配置各个节点之间的免密登录,避免节点之间交互时需要输入密码。在1台服务器上生成密钥对,将密钥对复制到所有节点上,确保执行ssh连接到任意节点不会要求输入密码。

$ ssh-keygen -t rsa
$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

$ scp -r .ssh hadoop@node1:~/
$ scp -r .ssh hadoop@node2:~/
$ scp -r .ssh hadoop@node3:~/

$ ssh node1
$ ssh node2
$ ssh node3

配置环境变量

在集群模式下,涉及各个节点之间的一些命令交互,所以需要配置一下环境变量。主要就是在每个节点上都配置SPARK_HOME和PATH。

$ vi .bashrc

export SPARK_HOME=/home/hadoop/apps/spark-3.3.1-bin-hadoop3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

配置workers

workers文件配置了当前Spark独立集群环境下,有哪些worker节点,这里将规划的3个节点都添加进去,每个节点占一行,可以使用主机名称,也可以使用IP地址。

$ cd apps/spark-3.3.1-bin-hadoop3/conf/
$ cp workers.template workers
$ vi workers

node1
node2
node3

配置spark-default.conf

spark-submit提交的应用程序运行完成后,Spark Driver Web UI就会关闭,无法继续访问,为了能够查看已运行完成的应用程序的执行情况,Spark提供了History Server服务,在spark-default.conf配置文件中进行History Server的配置。

$ cp spark-defaults.conf.template spark-defaults.conf
$ vi spark-defaults.conf

spark.eventLog.enabled           true
spark.eventLog.dir               /tmp/spark-events

配置spark-env.sh

spark-env.sh文件主要是配置集群的环境信息,主要配置Java的路径、集群中的Master节点是哪个、Master的通讯端口、Spark Master Web UI的端口、Spark的日志路径和工作路径等,复制模板文件并在里面追加配置信息即可,配置文件中的SPARK_MASTER_HOST使用的是主机名称,这里是node1。

$ cp spark-env.sh.template spark-env.sh
$ vi spark-env.sh

# 告知 Spark Master运行在哪个机器上
SPARK_MASTER_HOST=node1
# 告知 Spark Master 的通讯端口
SPARK_MASTER_PORT=7077
# 告知 Spark Master 的 WebUI 端口
SPARK_MASTER_WEBUI_PORT=8080

# 指定 Spark 的日志存放路径
SPARK_LOG_DIR=/home/hadoop/logs/spark
# 指定 Spark 的工作路径
SPARK_WORKER_DIR=/home/hadoop/works/spark

启动Spark独立集群

确保在3台服务器上都完成环境变量的配置,以及Spark的三个配置文件的配置,确保三个配置文件内容保持一致,确保在3台服务器上创建好event日志目录/tmp/spark-events就可以启动Spark集群了。启动集群的命令start-all.sh、启动history server的命令start-history-server.sh所在的路径$SPARK_HOME/sbin/已经添加到环境变量$PATH里面了,可以直接执行命令。在node1上执行启动命令。

$ start-all.sh
$ start-history-server.sh

等待服务启动完成,下图展示了所有节点的进程信息,每台服务器都是Worker,因为在spark-env.sh配置文件中配置了SPARK_MASTER_HOST=node1,所以node1节点上有Master进程,在node1上启动了History Server。

Spark独立集群安装_第1张图片

集群启动成功后,可以通过node1的8080端口访问Spark Master Web UI。下图展示了集群的相关信息,包括master地址是spark://node1:7077、当前集群有3个Worker节点、当前并没有提交运行的应用程序。

Spark独立集群安装_第2张图片

至此,Spark独立集群安装完成。

使用spark-submit提交代码

虽然spark-submit可以在不指定选项和参数、仅指定Python代码路径的情况下正常运行,但是这种方式提交运行,Spark应用程序仅会在单机上运行,这与本地模式一致。这种方式没有充分利用集群的资源,并且在集群的Spark Master Web UI上也无法查看提交运行的Spark应用程序。想要充分利用集群资源并在Spark Master Web UI上看到提交的Spark应用程序,需要为spark-submit指定必要的选项,其中最重要的一个选项便是master。未指定该选项,则Spark默认以本地模式启动,本地模式也是可以指定master选项的,可选的master值包括local、local[n]、local[*]。在独立集群模式下,需要将master的值指定为Spark Master Web UI中看到的值spark://node1:7077。在Yarn模式下,需要将master的值指定为yarn。

master选项值 描述
local 本地模式运行,所有计算都在一个线程中,无法并行计算。
local[n] 本地模式运行,指定使用n个线程来模拟n个worker,通常将n指定为CPU的核数,以最大化利用CPU的能力。
local[*] 本地运行模式,直接使用CPU的最多核数来设置线程数。
spark://node1:7077 独立集群模式,指定为独立集群的master地址。
yarn Spark On Yarn模式,master固定值为yarn,可区分cluster模式和client模式。

指定master选项后提交Spark应用程序,spark-submit所在的路径$SPARK_HOME/bin/已经添加到环境变量$PATH里面了,可以直接执行命令。

spark-submit --master spark://node1:7077 /home/hadoop/WordCount.py

Spark应用程序在运行的过程中,会遇到报错的情况,这是因为words.txt文件是存放在本地文件系统的而不是HDFS上,Spark应用程序在执行的时候会去本地系统读取文件,而words.txt仅存在于node1上,在node2和node3上并不存在,所以node2和node3上分配到的executor在进行文件读取的时候就会报错。而文件上传到分布式文件系统HDFS则不会有这个问题。

...
(10.0.0.7 executor 2): java.io.FileNotFoundException: File file:/home/hadoop/words.txt does not exist
...
(10.0.0.6 executor 1): java.io.FileNotFoundException: File file:/home/hadoop/words.txt does not exist
...

将words.txt复制到所有服务器节点后再次执行Spark应用程序,程序就不会报错了,可以正确执行并成功输出结果。

$ scp words.txt node2:~/
$ scp words.txt node3:~/

程序执行完成后,在Spark Master Web UI可以看到应用程序的Job信息。

Spark独立集群安装_第3张图片

点击应用程序链接,可以看到应用程序执行情况。

Spark独立集群安装_第4张图片

在该列表中点击stdout和stderr链接可以查看日志信息。

Spark History Server

Spark应用程序运行结束后,Spark Driver Web UI随着Driver程序的结束而被关闭,此时要看应用程序的执行情况及日志信息,可以通过Spark History Server进行查看,Spark History Server的默认服务端口是18080,访问该端口可以查看到运行过的应用程序。下图展示了Spark History Server的界面,里面可以看到运行结束的两次执行的应用程序。

Spark独立集群安装_第5张图片

点击应用程序列表中的链接,会跳转到应用程序的执行情况界面,如下图所示的历史应用程序执行情况界面,这与我们所熟悉的Spark Driver Web UI界面一致,功能也一样。

Spark独立集群安装_第6张图片

你可能感兴趣的:(#,Spark环境安装,spark,hadoop,大数据)