本系列演示如何使用 Docker 搭建 Spark Cluster。
在本系列的第一部分,我们首先搭建一个包含 Scala, Python, SBT 和 Spark 的基础镜像,为后续的集群搭建打下基础。
所使用到的软件版本分别为:
Java: 1.8
Scala: 2.13.4
Python: 3
Spark: 2.4.7
基于网络的Dockerfile
为构建基础镜像,我们使用如下的 Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| FROM java:8-jdk-alpine
ENV DAEMON_RUN=true ENV SPARK_VERSION=2.4.7 ENV HADOOP_VERSION=2.7 ENV SCALA_VERSION=2.13.4 ENV SCALA_HOME=/usr/share/scala
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/main/" > /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \ apk add --no-cache bash curl jq && \ cd "/tmp" && \ wget --no-verbose "https://downloads.lightbend.com/scala/#123;SCALA_VERSION}/scala-#123;SCALA_VERSION}.tgz" && \ tar xzf "scala-#123;SCALA_VERSION}.tgz" && \ mkdir "#123;SCALA_HOME}" && \ rm "/tmp/scala-#123;SCALA_VERSION}/bin/"*.bat && \ mv "/tmp/scala-#123;SCALA_VERSION}/bin" "/tmp/scala-#123;SCALA_VERSION}/lib" "#123;SCALA_HOME}" && \ ln -s "#123;SCALA_HOME}/bin/"* "/usr/bin/" && \ apk del .build-dependencies && \ rm -rf "/tmp/"*
RUN export PATH="/usr/local/sbt/bin:$PATH" && \ apk update && apk add ca-certificates wget tar && \ mkdir -p "/usr/local/sbt" && \ wget -qO - --no-check-certificate "https://github.com/sbt/sbt/releases/download/v1.4.4/sbt-1.4.4.tgz" | tar xz -C /usr/local/sbt --strip-components=1 && \ sbt sbtVersion -Dsbt.rootdir=true
RUN apk add --no-cache python3
RUN wget --no-verbose https://apache.inspire.net.nz/spark/spark-#123;SPARK_VERSION}/spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz && tar -xvzf spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz \ && mv spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION} spark \ && rm spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz
|
该文件指定使用 Alpine Linux 官方的 JDK 8 镜像作为基础,通过在构建镜像时直接从网络下载 (使用 wget )相关的软件包来进行构建。
保存文件后,执行以下命令进行构建(假设以上的内容保存在名为 base-spark 的文件中)
1
| docker build -t="spark-base:2.3.1" -f base-spark .
|
基于本地文件的 Dockerfile
如果下载 scala, sbt 或 spark 时比较慢,或者是有些完全无法下载,可以先从别的渠道把这三个软件的压缩包下载好,再修改 Dockerfile 中的部分内容来完成构建。
为方便下载以上三个软件有困难的读者,笔者已经将相关压缩包发在百度盘中,可以凭下面的信息进行存取。
1 2
| 链接:https://pan.baidu.com/s/1mIEuRx9DmB_UNReUId6iqg 提取码:1j9u
|
下载以后,把三个压缩包和 Dockerfile 放在同一目录下。然后修改 Dockerfile 文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| FROM java:8-jdk-alpine
ENV DAEMON_RUN=true ENV SPARK_VERSION=2.4.7 ENV HADOOP_VERSION=2.7 ENV SCALA_VERSION=2.13.4 ENV SCALA_HOME=/usr/share/scala
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.8/main/" > /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \ apk add --no-cache bash curl jq
WORKDIR "/tmp"
COPY scala-#123;SCALA_VERSION}.tgz /tmp/scala-#123;SCALA_VERSION}.tgz
RUN tar xzf "scala-#123;SCALA_VERSION}.tgz" && \ mkdir "#123;SCALA_HOME}" && \ rm "/tmp/scala-#123;SCALA_VERSION}/bin/"*.bat && \ mv "/tmp/scala-#123;SCALA_VERSION}/bin" "/tmp/scala-#123;SCALA_VERSION}/lib" "#123;SCALA_HOME}" && \ ln -s "#123;SCALA_HOME}/bin/"* "/usr/bin/" && \ apk del .build-dependencies && \ rm -rf "/tmp/"*
RUN export PATH="/usr/local/sbt/bin:$PATH" && \ apk update && apk add ca-certificates wget tar && \ mkdir -p "/usr/local/sbt"
COPY sbt-1.4.4.tgz /tmp/sbt-1.4.4.tgz RUN tar xzf sbt-1.4.4.tgz -C /usr/local/sbt --strip-components=1 && \ /usr/local/sbt/bin/sbt sbtVersion -Dsbt.rootdir=true
RUN apk add --no-cache python3
COPY spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz /tmp/spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz
RUN tar -xvzf spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz \ && mv spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION} spark \ && rm spark-#123;SPARK_VERSION}-bin-hadoop#123;HADOOP_VERSION}.tgz
|
保存文件后,执行以下命令进行构建(假设以上的内容保存在名为 base-spark 的文件中)
1
| docker build -t="spark-base:2.3.1" -f base-spark .
|