在 上一篇文章, 我们构建了 Spark 的基础镜像,在本文中,我们借助于基础镜像来构建 Spark 的 standalone 集群。
集群组成
在本次演示中要建立的集群包含一台 spark master 和 三台 spark worker。 部署在 docker 虚拟网络中,网段为 10.5.0.0/16。 每个 spark 实例有自己的 ip 地址。并通过和本机(host)的端口映射暴露自己,提供给外部进行访问。
建立 master 镜像
我们以上文中构建的 spark-base:2.3.1 为基础来构建 spark-master 镜像。主要增加的是执行启动 master 的命令。 如下:
1 | FROM spark-base:2.3.1 |
以上是 Dockerfile 文件, 为启动 master, 我们新增了一个名为 start-master.sh Shell文件, 内容如下:
1 |
|
保存以上两个文件在同一目录中,然后执行以下命令构建镜像:
1 | docker build -t="spark-master:2.3.1" . |
建立 worker 镜像
在 spark-base:2.3.1 镜像的基础上, 增加执行启动 worker 节点的命令。 如下:
1 | FROM spark-base:2.3.1 |
以上是 Dockerfile 文件, 为启动 worker, 我们新增了一个名为 start-worker.sh Shell文件, 内容如下:
1 |
|
保存以上两个文件在同一目录中,然后执行以下命令构建镜像:
1 | docker build -t="spark-worker:2.3.1" . |
使用 docker-compose 编排容器
建立一个名为: docker-compose.yml 的文件,包含以下内容:
1 | version: "3.7" |
可用看到,编排了一个 master 和 三个 worker 容器实例。 为设置 worker 的运行参数又引入了一个名为 spark-worker-env.sh 的文件,内容如下:
1 |
|
可用看到,通过环境变量 SPARK_MASTER, 指明了 master 的地址和端口,因为实在 docker 的虚拟网络中,因此可用直接使用容器实例名作为 host 的名字。
保存以上两个文件在同一命令里,然后在中执行以下命令启动集群:
1 | docker-compose up -d |
可用看到系统提示4个容器被建立,类似下面的系统输出:
1 | Creating network "spark-standalone-cluster" with driver "bridge" |
通过 docker ps 命令,也可用看到这是个启动的容器
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
接下来,就可用通过浏览器访问本机的 8080 端口
1 | http://localhost:8080 |
就可用看到 master 和整个集群中节点的信息了。
注意: 以上配置只适合于开发环境,要用在正式环境,需要进一步的配置,比如把数据,应用的存储从容器中映射的 Host 的存储或是分布式存储 HDFS 中