Docker 搭建 Spark

引言 使用 Dockerfile、Docker Compose 构建 Spark集群环境,方便以后的部署,日常开发。 Spark部署模式主要有四种:
    Local模式(单机模式) Standalone模式(使用Spark自带的简单集群管理器) YARN模式(使用YARN作为集群管理器) Mesos模式(使用Mesos作为集群管理器)
关联仓库地址:https://github.com/yiyungent/spark-docker 1. 准备
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FROM ubuntu:20.04 AS base

LABEL maintainer="yiyun <yiyungent@gmail.com>"

# 设置国内阿里云镜像源
COPY etc/apt/aliyun-ubuntu-20.04-focal-sources.list /etc/apt/sources.list

# 时区设置
ENV TZ=Asia/Shanghai

RUN apt-get update

# 1. 安装常用软件
RUN apt-get install -y wget
RUN apt-get install -y ssh
RUN apt-get install -y vim
2. 安装 Java
Dockerfile
1
2
3
4
5
6
7
# 2. 安装 Java
ADD jdk-8u131-linux-x64.tar.gz /opt/
RUN mv /opt/jdk1.8.0_131 /opt/jdk1.8
ENV JAVA_HOME=/opt/jdk1.8
ENV JRE_HOME={{hbeSeoContent}}#123;JAVA_HOME}/jre
ENV CLASSPATH=.:{{hbeSeoContent}}#123;JAVA_HOME}/lib:{{hbeSeoContent}}#123;JRE_HOME}/lib
ENV PATH={{hbeSeoContent}}#123;JAVA_HOME}/bin:$PATH

测试

1
docker build -t spark-with-java .
1
docker run -it --name spark-container spark-with-java bash
3. 安装 Scala
Dockerfile
1
2
3
4
5
6
# 3. 安装 Scala
RUN wget http://downloads.lightbend.com/scala/2.12.1/scala-2.12.1.tgz
RUN mkdir /opt/scala
RUN tar -zxvf scala-2.12.1.tgz -C /opt/scala/
ENV SCALA_HOME=/opt/scala/scala-2.12.1
ENV PATH={{hbeSeoContent}}#123;SCALA_HOME}/bin:$PATH

测试

1
docker build -t spark-with-scala .
1
docker run -it --name spark-container spark-with-scala bash
1
scala -version
4. 安装 Spark
Dockerfile
1
2
3
4
5
6
7
# 4. 安装 Spark
RUN mkdir /opt/spark
#RUN wget https://downloads.apache.org/spark/spark-3.0.2/spark-3.0.2-bin-hadoop2.7.tgz
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.0.2/spark-3.0.2-bin-hadoop2.7.tgz
RUN tar -zxvf spark-3.0.2-bin-hadoop2.7.tgz -C /opt/spark/
ENV SPARK_HOME=/opt/spark/spark-3.0.2-bin-hadoop2.7
ENV PATH={{hbeSeoContent}}#123;SPARK_HOME}/bin:$PATH
注意: 这里使用的是 spark-3.0.2-bin-hadoop2.7 ,此包已经包含了编译好的hadoop2.7, start-all.sh 将同时启动 Hadoop 集群

测试

1
docker build -t spark .
1
docker run -it --name spark-container spark bash
1
spark-shell
1
3+5
补充: 使用如下命令退出spark-shell交互式环境:
1
:quit

测试Spark是否可以正常访问Ubuntu系统中的本地文件

1
vim /home/word.txt
/home/word.txt
1
2
3
I love Spark
I love Hadoop
Spark is good
1
spark-shell
1
val line=sc.textFile("file:///home/word.txt")
1
println(line.count())

测试Spark是否能够正常访问Hadoop中的HDFS

由于我们经常需要让Spark去访问Hadoop中的HDFS, 因此,需要测试一下Spark是否可以正常访问HDFS。
执行如下命令启动Hadoop中的HDFS:

启动 Spark 集群

默认在哪台机器启动,那台机器就是master节点
1
/opt/spark/spark-3.0.2-bin-hadoop2.7/sbin/start-all.sh
补充: 也可以利用环境变量:
1
$SPARK_HOME/sbin/start-all.sh
补充: 也可以在其它节点启动备份主节点:
1
$SPARK_HOME/sbin/start-master.sh
测试 参考: Data Exploration Using Spark 参考 感谢帮助! 利用docker搭建spark测试集群 - 知乎 马踏飞燕——奔跑在Docker上的Spark - jasonfreak - 博客园 Spark安装和使用_厦大数据库实验室博客 在集群上运行Spark应用程序_厦大数据库实验室博客 马踏飞燕——奔跑在Docker上的Spark - jasonfreak - 博客园 在阿里云中搭建大数据实验环境_厦大数据库实验室博客 Ubuntu 14.04 Spark单机环境搭建与初步学习 - 知乎