Spark Docker 镜像构建

一、环境

组件版本备注
Apache Spark3.3.0
Apache hadoop3.3.2
Apache Iceberg0.14.0
Volcano1.6.0
Java1.8.111spark 源码编译依赖
Apache Maven3.8.6

二、Docker 镜像构建

#####################################################################################################################################
# 1. 环境变量
#####################################################################################################################################

#自定义目录,根据实际情况进行更改
BASE_DIR=/opt/soft/lakehouse/spark
USER_HOME=/home/luke
#镜像仓库地址
HARBOR_PATH=core.harbor.apps.g66666.hk.my-demo.tech/lakehouse
#版本变量
SPARK_VERSION=3.3.0
SPARK_BINARY_VERSION=3.3
SCALA_BINARY_VERSION=2.12
HADOOP_VERSION=3.3.2
ICEBERG_VERSION=0.14.0
AWS_SDK_BUNDLE_VERSION=2.17.131
AWS_JAVA_SDK_BUNDLE_VERSION=1.11.1026

#####################################################################################################################################
# 2. 源码编译
#####################################################################################################################################
cd ${BASE_DIR}
# 下载源码包
wget https://dlcdn.apache.org/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}.tgz
 # 解压
tar -zxf spark-${SPARK_VERSION}.tgz
# 源码编译
cd spark-${SPARK_VERSION}
./dev/make-distribution.sh --name spark-volcano-${SPARK_VERSION} --pip --tgz -Dhadoop.version=${HADOOP_VERSION} -Phive -Phive-thriftserver -Pkubernetes -Pvolcano

# 编译好的二进制安装包
${BASE_DIR}/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-spark-volcano-${SPARK_VERSION}.tgz

#####################################################################################################################################
# 3. 依赖配置
#####################################################################################################################################

cd ${BASE_DIR}
# 解压刚才编译好的二进制安装包
tar -zxf ${BASE_DIR}/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-spark-volcano-${SPARK_VERSION}.tgz \
-C ${BASE_DIR}/


cd spark-${SPARK_VERSION}-bin-spark-volcano-${SPARK_VERSION}/jars

# aws 相关依赖
mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ -DgroupId=software.amazon.awssdk -DartifactId=bundle -Dversion=${AWS_SDK_BUNDLE_VERSION}
mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ -DgroupId=software.amazon.awssdk -DartifactId=url-connection-client -Dversion=${AWS_SDK_BUNDLE_VERSION}

cp ${USER_HOME}/.m2/repository/software/amazon/awssdk/bundle/${AWS_SDK_BUNDLE_VERSION}/bundle-${AWS_SDK_BUNDLE_VERSION}.jar .
cp ${USER_HOME}/.m2/repository/software/amazon/awssdk/url-connection-client/${AWS_SDK_BUNDLE_VERSION}/url-connection-client-${AWS_SDK_BUNDLE_VERSION}.jar .

# spark iceberg
wget https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-spark-runtime-${SPARK_BINARY_VERSION}_${SCALA_BINARY_VERSION}/${ICEBERG_VERSION}/iceberg-spark-runtime-${SPARK_BINARY_VERSION}_${SCALA_BINARY_VERSION}-${ICEBERG_VERSION}.jar

# hadoop-aws
wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/${HADOOP_VERSION}/hadoop-aws-${HADOOP_VERSION}.jar
wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/${AWS_JAVA_SDK_BUNDLE_VERSION}/aws-java-sdk-bundle-${AWS_JAVA_SDK_BUNDLE_VERSION}.jar

#####################################################################################################################################
# 4. 编写Dockerfile
#####################################################################################################################################

cd ${BASE_DIR}/spark-${SPARK_VERSION}-bin-spark-volcano-${SPARK_VERSION}

cat << EOF | tee Dockerfile
ARG java_image_tag=11-jre-slim

FROM openjdk:\${java_image_tag}

ARG spark_uid=185

# Before building the docker image, first build and make a Spark distribution following
# the instructions in http://spark.apache.org/docs/latest/building-spark.html.
# If this docker file is being used in the context of building your images from a Spark
# distribution, the docker build command should be invoked from the top level directory
# of the Spark distribution. E.g.:
# docker build -t spark:latest -f kubernetes/dockerfiles/spark/Dockerfile .

RUN set -ex && \
sed -i 's/http:\/\/deb.\(.*\)/https:\/\/deb.\1/g' /etc/apt/sources.list && \
apt-get update && \
ln -s /lib /lib64 && \
apt install -y bash tini libc6 libpam-modules krb5-user libnss3 procps && \
mkdir -p /opt/spark && \
mkdir -p /opt/spark/examples && \
mkdir -p /opt/spark/work-dir && \
touch /opt/spark/RELEASE && \
rm /bin/sh && \
ln -sv /bin/bash /bin/sh && \
echo "auth required pam_wheel.so use_uid" >> /etc/pam.d/su && \
chgrp root /etc/passwd && chmod ug+rw /etc/passwd && \
rm -rf /var/cache/apt/*

COPY jars /opt/spark/jars
COPY bin /opt/spark/bin
COPY sbin /opt/spark/sbin
COPY kubernetes/dockerfiles/spark/entrypoint.sh /opt/
COPY kubernetes/dockerfiles/spark/decom.sh /opt/
COPY examples /opt/spark/examples
COPY kubernetes/tests /opt/spark/tests
COPY conf /opt/spark/conf
COPY data /opt/spark/data

ENV SPARK_HOME /opt/spark

WORKDIR /opt/spark/work-dir
RUN chmod g+w /opt/spark/work-dir
RUN chmod a+x /opt/decom.sh

ENTRYPOINT [ "/opt/entrypoint.sh" ]

# Specify the User that the actual main process will run as
USER \${spark_uid}
EOF

#####################################################################################################################################
# 5. 构建Docker 镜像
#####################################################################################################################################

cd ${BASE_DIR}/spark-${SPARK_VERSION}-bin-spark-volcano-${SPARK_VERSION}

sudo docker build -t spark-volcano:${SPARK_VERSION} .

#####################################################################################################################################
# 6. 推送到 镜像仓库Harbor
#####################################################################################################################################

sudo docker tag spark-volcano:${SPARK_VERSION} ${HARBOR_PATH}/spark-volcano:${SPARK_VERSION}
sudo docker push ${HARBOR_PATH}/spark-volcano:${SPARK_VERSION}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值