Spark独立集群安装


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。

在这里插入图片描述

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

在这里插入图片描述

至此,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地址。
yarnSpark 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信息。

在这里插入图片描述

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

在这里插入图片描述

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

Spark History Server

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

在这里插入图片描述

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

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是在 Docker 中安装 Spark 独立集群的步骤: 1. 安装 Docker 首先,你需要在你的机器上安装 Docker。你可以在 Docker 官网上找到安装教程。 2. 下载 Spark 接下来,你需要从 Apache Spark 官网下载最新版本的 Spark。 3. 创建一个 Docker 镜像 在你的 Spark 目录中,创建一个 Dockerfile 文件,内容如下: ``` FROM openjdk:8-jre-slim ENV SPARK_VERSION=3.1.2 ENV HADOOP_VERSION=3.2 RUN apt-get update && \ apt-get install -y curl && \ curl https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz | tar -xz -C /opt && \ cd /opt && \ ln -s spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION} spark && \ rm -rf /var/lib/apt/lists/* ENV SPARK_HOME /opt/spark ENV PATH $PATH:${SPARK_HOME}/bin EXPOSE 4040 ``` 这个 Dockerfile 文件将会安装 Java 运行时环境和 Spark,并将 Spark 安装到 /opt/spark 目录下。 接下来,使用以下命令构建 Docker 镜像: ``` docker build -t spark-cluster . ``` 这个命令将会构建一个名为 spark-cluster 的 Docker 镜像。 4. 启动 Spark 独立集群 使用以下命令启动 Spark 独立集群: ``` docker run -it --rm -p 4040:4040 -p 8080:8080 -p 7077:7077 --name spark-master spark-cluster ./bin/spark-class org.apache.spark.deploy.master.Master -h spark-master ``` 这个命令将会启动一个名为 spark-master 的容器,并且会在容器中启动 Spark 独立集群的主节点。 接下来,你需要启动一个或多个 Spark 独立集群的工作节点。使用以下命令启动一个工作节点: ``` docker run -it --rm --link spark-master:spark-master spark-cluster ./bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077 ``` 这个命令将会启动一个名为 spark-worker 的容器,并且会在容器中启动 Spark 独立集群的工作节点。注意,这个命令中的 --link 参数将会链接到之前启动的 spark-master 容器。 你可以根据需要启动多个工作节点。 5. 测试 Spark 独立集群 现在,你可以使用以下命令启动 Spark Shell,并连接到 Spark 独立集群: ``` docker run -it --rm --link spark-master:spark-master spark-cluster ./bin/spark-shell --master spark://spark-master:7077 ``` 这个命令将会启动一个 Spark Shell,并连接到 Spark 独立集群。你可以在 Shell 中执行 Spark 任务,并查看 Spark UI 界面来监控任务的执行情况。 希望这个步骤对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wux_labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值