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.extraClassPath
和 spark.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 环境里没有需要的包时,自己上传提供