如何为MRS_3.x版本的Spark添加三方依赖包
1 背景
MRS上使用spark提交任务经常引入一些三方依赖包,本文主要介绍几种添加依赖包的方式。
2 处理方式
2.1 命令行添加
最方便的添加方式是直接使用spark-submit自带的命令将jar包添加到运行的环境变量中。
--jars JARS Comma-separated list of jars to include on the driver and executor classpaths.
同样的spark-sql和spark-shell命令也可以使用--jars添加依赖包。
2.2 使用spark.yarn.archive添加
除了命令行添加jar包,某些场景会遇到无法使用命令行启动任务,因此需要使用到spark.yarn.archive指定特定的zip压缩包来加入依赖包。
默认的配置指向的是一个hdfs上的zip压缩包(8.0.2.1会根据不同版本变化,实际路径可以查看spark配置文件spark-defaults.conf中的值):
hdfs://hacluster/user/spark2x/jars/8.0.2.1/spark-archive-2x.zip
这个文件包含了常用的spark依赖包,会被所有的spark任务获取并使用。
我们可以直接将新的依赖包放入这个压缩包中。为了防止对其他任务造成影响,可以直接将新的压缩包单独存放hdfs上的一个位置,然后修改配置文件spark.yarn.archive值,指向新的压缩包。
因为只有在yarn上运行才会使用到这个压缩包,因此无法直接让client模式下spark的driver获取到里面的压缩包,需要手动添加到客户端的jars目录下。
1、将需要的jar包放到spark客户端的jars目录下:
cp test.jar $SPARK_HOME/jars
cd $SPARK_HOME/jars
chmod 755 test.jar
chown omm:ficommon test.jar
2、创建本地临时目录,并使用hdfs命令将zip文件下载到本地
cd /opt
mkdir sparkTmp
cd sparkTmp
hdfs dfs -get hdfs://hacluster/user/spark2x/jars/8.0.2.1/spark-archive-2x.zip
3、解压zip文件,并删除源文件
unzip spark-archive-2x.zip
rm -f spark-archive-2x.zip
4、将需要添加的包放到当前目录下,并修改权限为755
mv test.jar /opt/sparkTmp
cd /opt/sparkTmp
chmod 755 test.jar
5、重新打成压缩包
zip spark-archive-2x.zip ./*
6、上传新的压缩包
hdfs dfs -put spark-archive-2x.zip hdfs://hacluster/tmp/spark-archive-2x.zip
7、修改配置
spark.yarn.archive=hdfs://hacluster/tmp/spark-archive-2x.zip
2.3 使用spark.yarn.dist.innerarchives添加
如果使用的jar包较多,且会频繁变动,则需要使用此方法添加依赖包。
1、将相关的jar包都放到一个目录中,例如/opt/sparklib
cp test.jar /opt/sparklib
2、修改相关文件的权限
cd /opt/sparklib
chmod 755 ./*
3、将所有依赖包打包,并上传到hdfs
zip sparklib.zip ./*
hdfs dfs -put sparklib.zip /tmp
4、修改相应的配置项,在spark-defaults.conf配置文件中修改
spark.yarn.dist.innerarchives = hdfs://hacluster/user/spark2x/jars/8.0.2.1/spark-archive-2x-x86.zip#x86,hdfs://hacluster/user/spark2x/jars/8.0.2.1/spark-archive-2x-arm.zip#arm,hdfs://hacluster/tmp/sparklib.zip#newlib
spark.executor.extraClassPath = ./newlib/*
spark.yarn.cluster.driver.extraClassPath = /opt/Bigdata/common/runtime/security:./newlib/*
如果是yarn-client,则修改
spark.driver.extraClassPath = /opt/Bigdata/client/Spark2x/spark/conf/:/opt/Bigdata/client/Spark2x/spark/jars/*:/opt/Bigdata/client/Spark2x/spark/x86/*:/opt/sparklib/*
- 点赞
- 收藏
- 关注作者
评论(0)