当前位置: 代码迷 >> 综合 >> Docker Images: 构建单机版 Spark 镜像,解决第三方 Jar 包的依赖问题
  详细解决方案

Docker Images: 构建单机版 Spark 镜像,解决第三方 Jar 包的依赖问题

热度:60   发布时间:2023-09-05 17:53:19.0

Docker Images: 构建单机版 Spark 镜像,解决第三方 Jar 包的依赖问题

    • 构建单机版 Spark 的 Docker 镜像
    • 解决第三方 Jar 包的依赖问题

构建单机版 Spark 的 Docker 镜像

下载相关安装包:

  • jdk-8u231-linux-x64.tar.gz
  • scala-2.10.6.tgz
  • spark-1.6.0-bin-hadoop2.6.tgz

构建 Docker 镜像:

[eln@localhost test]$ ls
dockerfile  jdk-8u231-linux-x64.tar.gz  scala-2.10.6.tgz  spark-1.6.0-bin-hadoop2.6.tgz[eln@localhost test]$ sudo docker build -t spark:1.6.0 . -f dockerfile[eln@localhost test]$ sudo docker run --rm -it spark:1.6.0 spark-shell
[eln@localhost test]$ sudo docker run --rm -it spark:1.6.0 /bin/bash[eln@localhost test]$ sudo docker save spark:1.6.0 -o spark_1_6_0.tar

dockerfile

FROM centos:7
MAINTAINER eln# 修改时区,安装中文支持,配置显示中文
RUN rm -rf /etc/localtime  && \ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && \yum install -y kde-l10n-Chinese glibc-common  && \localedef -c -f UTF-8 -i zh_CN zh_CN.utf8  && \rm -rf /var/cache/yum/*ENV LC_ALL zh_CN.utf8# 安装 Spark1.6.0
ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD scala-2.10.6.tgz /usr/local/
ADD spark-1.6.0-bin-hadoop2.6.tgz /usr/local/
ADD apache-maven-3.6.2-bin.tar.gz /usr/local/ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV SPARK_HOME /usr/local/spark-1.6.0-bin-hadoop2.6
ENV SCALA_HOME /usr/local/scala-2.10.6
ENV MAVEN_HOME /usr/local/apache-maven-3.6.2
ENV PATH=$JAVA_HOME/bin:$SPARK_HOME/bin:$SCALA_HOME/bin:$MAVEN_HOME/bin:$PATHCMD ["/bin/bash"]

解决第三方 Jar 包的依赖问题

如果需要设置指定多个 Jar 包,可以将多个 Jar 包放在一个路径下,并设置 spark.driver.extraClassPathspark.executor.extraClassPath 参数指定为 Jar 包的路径,如:

spark-submit --master local[*] \
--conf "spark.default.parallelism=1000" \
--conf "spark.kryoserializer.buffer.max=512m" \
--conf "spark.kryoserializer.buffer=64m" \
--conf "spark.driver.extraJavaOptions=-Xms12g -Xmx12g" \
--conf "spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=65  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \
--conf "spark.driver.extraClassPath=/myapp/jars/*" \
--conf "spark.executor.extraClassPath=/myapp/jars/*" \
--num-executors 4 --executor-cores 4 \
--executor-memory 8g --driver-memory 8g \
--class entrance.Begin \
--queue default Hive2Mysql.jar

Spark application 运行加载依赖有三个地方,而且优先级由高到低:

  • Spark-submit --config "spark.{driver/executor}.extraClassPath=someJar" 提交的依赖包,优先级最高,一般有相同 jar 但是版本不同,需要 解决冲突 时使用
  • SystemClasspath 即 Spark 安装时候提供的依赖包,默认优先使用环境的包,这样更加稳定安全。这里是 /usr/local/spark-1.6.0-bin-hadoop2.6/lib
  • Spark-submit --jars 在默认 spark 环境里没有需要的包时,自己上传提供
  相关解决方案