如何为MRS_3.x版本的Spark添加三方依赖包

举报
泽及天下不为仁 发表于 2021/10/11 20:38:51 2021/10/11
【摘要】 MRS上使用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/*
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。