spark执行优化——依赖上传到HDFS二(-conf spark.yarn.dist.jars或者--jars 的使用)-程序员宅基地

技术标签: 大数据-spark  spark  scala  big data  

1.说明

之前整理过一篇类似文章,但是这个spark.yarn.jar配置的目录最好只是放spark jars目录下的jar包,如果放入其他的jar包,很大概率会有冲突,而且如果项目比较多,jar包引入的内容版本不尽相同,也不太利于管理。题主这里有一个spark的分析项目,引入了很多依赖,如果只是配置了spark.yarn.jars,上传jar包的过程仍然很慢,所以还是需要把项目的依赖jar包上传到HDFS,经过查阅资料和翻查官网,发现了application-jar , --jars 都是即可以使用本地也可以使用hdfs。
还有一个参数在提交的时候也可以起到这个作用spark.yarn.dist.jars
spark执行优化——依赖上传到HDFS(spark.yarn.jar和spark.yarn.archive的使用)

1.1 application-jar/–jars

官方关于application-jar、–jars的说明
在这里插入图片描述在这里插入图片描述
关于–jars,file、hdfs:, http:, https:, ftp、local都能使用,但是多个jar使用逗号间隔,而且目录扩展不适用。就是说–jar hdfs:///spark-yarn/dbp-jars/*.jar 这种写法不支持。

1.2 spark.yarn.dist.jars

官方说明如下
在这里插入图片描述
只是说每个executer下的jar使用逗号分隔,我理解有点在说每个executor下具体目录下的jar,感觉像是说本地,。但是实际测试发现直接使用hdfs上的jar包也是可以的,而且看到一篇文章是在代码里使用的。

2.具体使用

无论是–jars还是spark.yarn.dist.jars都要求多个jar之间逗号分隔,所以使用之前要做一些处理,hdfs上的jar包太多,所以使用shell作如下处理,hdfs上/spark-yarn/xxx-jars/上传了我项目所有的外部jar包

hdfs_jars=`hadoop fs -ls -C /spark-yarn/xxx-jars/`
for f in ${hdfs_jars}; do
   app_CLASSPATH='hdfs://'$f,${app_CLASSPATH}
done
# 依赖jar包
len=${
    #app_CLASSPATH}-1
JAR_PATH=${app_CLASSPATH:0:len}

这样在提交任务的指令里直接引用JAR_PATH就行了
例如:

spark-submit \
  --class org.apache.spark.xxxx.ExecutorMethod \
  --master yarn \
  --deploy-mode cluster \  
  --executor-memory 20G \
  --num-executors 50 \
  --jars $JAR_PATH \
  /path/to/examples.jar \
  param..

或者

spark-submit \
  --class org.apache.spark.xxxx.ExecutorMethod \
  --master yarn \
  --deploy-mode cluster \  
  --executor-memory 20G \
  --num-executors 50 \
  --conf spark.yarn.dist.jars=$JAR_PATH
  /path/to/examples.jar \
  param..

使用hdfs上的jar之后可以看到提交日志
Source and destination file systems are the same. Not copying 就是spark-defaults.conf里spark.yarn.jars的配置效果
Same name resource的就是 --conf spark.yarn.dist.jars(或者–jars)指定的hdfs上的jar产生的效果

21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/antlr4-runtime-4.7.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/aopalliance-1.0.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/aopalliance-repackaged-2.4.0-b34.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/apache-log4j-extras-1.2.17.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/arpack_combined_all-0.1.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/arrow-format-0.8.0.3.1.0.0-78.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/arrow-memory-0.8.0.3.1.0.0-78.jar
21/08/26 13:28:12 INFO Client: Source and destination file systems are the same. Not copying hdfs://xxx/spark-yarn/jars/arrow-vector-0.8.0.3.1.0.0-78.jar
...
...
21/08/26 13:28:14 WARN Client: Same name resource hdfs://xxx/spark-yarn/xxx-jars/commons-crypto-1.0.0.jar added multiple times to distributed cache
21/08/26 13:28:14 WARN Client: Same name resource hdfs://xxx/spark-yarn/xxx-jars/commons-configuration2-2.1.1.jar added multiple times to distributed cache

注意
如果直接使用如下写法

--conf spark.yarn.jars="hdfs:///spark-yarn/xxx-jars/*.jar

会直接报错: 找不到或无法加载主类 org.apache.spark.deploy.yarn.ApplicationMaster

以上两种写法运行都没问题,但是使用–jars的方式引入hdfs上的jar,会在提交任务时多打印如下warn日志,个人推荐使用spark.yarn.dist.jars

Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-lang-2.6.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-io-1.3.2.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-httpclient-3.1.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-csv-1.4.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-crypto-1.0.0.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-configuration2-2.1.1.jar.
Warning: Skip remote jar hdfs://xxxxx/spark-yarn/xxx-jars/commons-configuration-1.10.jar.
...
...

看到有文章说local模式提交任务无法执行HDFS上的jar,我又为此做了些测试,我现在使用的是Ambari 2.7.3的集群,
可以看到提交任务日志会有如下内容,执行程序是test-program.jar,可以看到执行程序被抓取到了本地
把执行程序上传到hdfs上


  420  21/08/26 15:19:58 INFO SparkContext: Added JAR hdfs://xxx/spark-yarn/xxx-jars/RoaringBitmap-0.5.11.jar at hdfs://xxx/spark-yarn/xxx-jars/RoaringBitmap-0.5.11.jar with timestamp 1629962398294
  421  21/08/26 15:19:58 INFO SparkContext: Added JAR hdfs://xxx/spark-yarn/xxx-jars/HdrHistogram-2.1.9.jar at hdfs://xxx/spark-yarn/xxx-jars/HdrHistogram-2.1.9.jar with timestamp 1629962398294
  422: 21/08/26 15:19:58 INFO SparkContext: Added JAR hdfs:///spark-yarn/programs/test-program.jar at hdfs:///spark-yarn/programs/test-program.jar with timestamp 1629962398294

  ...
 1192  21/08/26 15:20:17 INFO Utils: Fetching hdfs://xxx/spark-yarn/xxx-jars/chill-java-0.9.3.jar to /tmp/spark-ee38cb1d-da49-4c38-bb6c-eb6288ca056a/userFiles-fc789632-ac6c-4347-a279-7971a0f38098/fetchFileTemp2882690771436990167.tmp
 1193  21/08/26 15:20:17 INFO Executor: Adding file:/tmp/spark-ee38cb1d-da49-4c38-bb6c-eb6288ca056a/userFiles-fc789632-ac6c-4347-a279-7971a0f38098/chill-java-0.9.3.jar to class loader
 1194: 21/08/26 15:20:17 INFO Executor: Fetching hdfs:///spark-yarn/programs/test-program.jar with timestamp 1629962398294
 1195: 21/08/26 15:20:17 INFO Utils: Fetching hdfs:/spark-yarn/programs/test-program.jar to /tmp/spark-ee38cb1d-da49-4c38-bb6c-eb6288ca056a/userFiles-fc789632-ac6c-4347-a279-7971a0f38098/fetchFileTemp6784106893527808599.tmp
 1196: 21/08/26 15:20:17 INFO Executor: Adding file:/tmp/spark-ee38cb1d-da49-4c38-bb6c-eb6288ca056a/userFiles-fc789632-ac6c-4347-a279-7971a0f38098/test-program.jar to class loader
...
...

结尾

至此,经验证,spark在yarn上提交任务的jar包依赖就都可以上传到hdfs上了,包括执行程序本身,不论是本地或者yarn模式提交都可以。

参考文章

saprk submit 无法执行HDFS上的jar
Spark - 使用yarn client模式
Spark官网Submitting Applications

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/OMars/article/details/119929713

智能推荐

适合入门的8个趣味机器学习项目-程序员宅基地

文章浏览阅读86次。首发地址:https://yq.aliyun.com/articles/221708谈到机器学习,相信很多除学者都是通过斯坦福大学吴恩达老师的公开课《Machine Learning》开始具体的接触机器学习这个领域,但是学完之后又不知道自己的掌握情况,缺少一些实际的项目操作。对于机器学习的相关竞赛挑战,有些项目的门槛有些高,参加后难以具体的实现,因此造..._scrath五子棋下载

oracle 12c avg,Oracle 12c新特性系列专题-安徽Oracle授权认证中心-程序员宅基地

文章浏览阅读83次。原标题:Oracle 12c新特性系列专题-安徽Oracle授权认证中心 随着Oracle database 12c的普及,数据库管理员 (DBA) 的角色也随之发生了转变。 Oracle 12c数据库对 DBA 而言是下一代数据管理。它让 DBA 可以摆脱单调的日常管理任务,能够专注于如何从数据中获取更多价值。未来我们会推出基于Oracle12c的技术文章,帮助DBA尽快掌握新一代数据库的新特性..._ilm add policy row store compress advanced row after

第七周项目三(负数把正数赶出队列)-程序员宅基地

文章浏览阅读150次。问题及代码:*Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:负数把正数赶出队列.cpp *作者:张冰 *完成日期;2016年10月09日 *版本号;v1.0 * *问题描述: 设从键盘输入一整数序列a1,a2,…an,试编程实现: 当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai

Linux命名空间学习教程(二) IPC-程序员宅基地

文章浏览阅读150次。本文讲的是Linux命名空间学习教程(二) IPC,【编者的话】Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid、net、ipc、mnt、uts 等命名空间将容器的进程、网络、消息、文件系统和hostname 隔离开。本文是Li..._主机的 ipc 命名空间

adb强制安装apk_adb绕过安装程序强制安装app-程序员宅基地

文章浏览阅读2w次,点赞5次,收藏7次。在设备上强制安装apk。在app已有的情况下使用-r参数在app版本低于现有版本使用-d参数命令adb install -r -d xxx.apk_adb绕过安装程序强制安装app

随便推点

STM32F407 越界问题定位_stm32flash地址越界怎么解决-程序员宅基地

文章浏览阅读290次。如果是越界进入硬件错误中断,MSP 或者 PSP 保存错误地址,跳转前会保存上一次执行的地址,lr 寄存器会保存子函数的地址,所以如果在 HardFault_CallBack 中直接调用 C 语言函数接口会间接修改了 lr,为了解决这个问题,直接绕过 lr 的 C 语言代码,用汇编语言提取 lr 寄存器再决定后面的操作。由于 STM32 加入了 FreeRTOS 操作系统,可能导致无法准确定位,仅供参考(日常编程需要考虑程序的健壮性,特别是对数组的访问,非常容易出现越界的情况)。_stm32flash地址越界怎么解决

利用SQL注入上传木马拿webshell-程序员宅基地

文章浏览阅读1.8k次。学到了一种操作,说实话,我从来没想过还能这样正常情况下,为了管理方便,许多管理员都会开放MySQL数据库的secure_file_priv,这时就可以导入或者导出数据当我如图输入时,就会在D盘创建一个名为123456.php,内容为<?php phpinfo();?>的文件我们可以利用这一点运用到SQL注入中,从拿下数据库到拿下目标的服务器比如我们在使用联合查询注入,正常是这样的语句http://xxx?id=-1 union select 1,'你想知道的字段的内容或查询语句',

Html CSS的三种链接方式_html链接css代码-程序员宅基地

文章浏览阅读2.9w次,点赞12次,收藏63次。感谢原文:https://blog.csdn.net/abc5382334/article/details/24260817感谢原文:https://blog.csdn.net/jiaqingge/article/details/52564348Html CSS的三种链接方式css文本的链接方式有三种:分别是内联定义、链入内部css、和链入外部css1.代码为:<html>..._html链接css代码

玩游戏哪款蓝牙耳机好?2021十大高音质游戏蓝牙耳机排名_适合游戏与运动的高音质蓝牙耳机-程序员宅基地

文章浏览阅读625次。近几年,蓝牙耳机市场发展迅速,越来越多的消费者希望抛弃线缆,更自由地听音乐,对于运动人士来说,蓝牙耳机的便携性显得尤为重要。但目前市面上的大多数蓝牙耳机实际上都是“有线”的,运动过程中产生的听诊器效应会严重影响听歌的感受。而在“真无线”耳机领域,除了苹果的AirPods外,可供选择的产品并不多,而AirPods又不是为运动场景打造的,防水能力非常差。那么对于喜欢运动又想要“自由”的朋友来说,有没有一款产品能够满足他们的需求呢?下面这十款小编专门为大家搜罗的蓝牙耳机或许就能找到适合的!网红击音F1_适合游戏与运动的高音质蓝牙耳机

iOS 17 测试版中 SwiftUI 视图首次显示时状态的改变导致动画“副作用”的解决方法-程序员宅基地

文章浏览阅读1k次,点赞6次,收藏7次。在本篇博文中,我们在 iOS 17 beta 4(SwiftUI 5.0)测试版中发现了 SwiftUI 视图首次显示时状态的改变会导致动画“副作用”的问题,并提出多种解决方案。

Flutter 自定义 轮播图的实现_flutter pageview轮播图 site:csdn.net-程序员宅基地

文章浏览阅读1.9k次。  在 上篇文章–Flutter 实现支持上拉加载和下拉刷新的 ListView 中,我们最终实现的效果是在 listView 上面留下了一段空白,本意是用来加载轮播图的,于是今天就开发了一下,希望能给各位灵感。一 、效果如下说一下大体思路   其实图片展示是用的 PageView ,然后,下面的指示器 是用的 TabPageSelector ,当然整体是用 Stack 包裹起来的。1、..._flutter pageview轮播图 site:csdn.net

推荐文章

热门文章

相关标签