Spark2.1.1<性能调优Spark运行时jar从yarn端访问>

本文介绍如何通过配置spark.yarn.jars属性减少Spark任务启动时间。通过将Spark JAR包上传至HDFS并指定路径,避免每次任务启动时重新上传JAR包至分布式缓存,从而显著降低SchedulerDelay。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么要让运行时Jar可以从yarn端访问

spark2以后,原有lib目录下的大JAR包被分散成多个小JAR包,原来的spark-assembly-*.jar已经不存在

每一次我们运行的时候,如果没有指定
spark.yarn.archive or spark.yarn.jars
Spark将在安装路径下的Jar目录,将其所有的Jar包打包然后将其上传到分布式缓存(官网上的原话是:To make Spark runtime jars accessible from YARN side, you can specify spark.yarn.archive or spark.yarn.jars. For details please refer to Spark Properties. If neither spark.yarn.archive nor spark.yarn.jars is specified, Spark will create a zip file with all jars under $SPARK_HOME/jars and upload it to the distributed cache.

这里以简单地写了一个wordcount.scala为例,将其打包然后部署到Spark集群上运行

object WordCount {
  def main(args: Array[String]): Unit = {
    if (args.length != 2)
      println("AppName  +   FilePath")
    val conf = new SparkConf()
      //      .setMaster("local[4]")
      .setAppName(args(0))
    val sc = new SparkContext(conf)
    val lines = sc.textFile(args(1))
    val flatRDD = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect.foreach(println)
  }
}

观察日志:
这里写图片描述

yarn.Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.

大致的意思说找不到spark.yarn.jars nor spark.yarn.archive,回到spark安装目录上传运行时的Jar包

观察一下SparkUI,这里以collect为例子

这里写图片描述

点进去。观察他的Scheduler Delay
这里写图片描述

可以看到Scheduler Delay=557-457=100

2.调优办法

  • 首先将Spark安装路径下的所有jar包上传到HDFS上,我是上传到了/system/sparkJar/jars
    这里写图片描述
  • 接着在spark的conf目录下的spark-defaults.conf末尾添加上这一行
spark.yarn.jars hdfs://172.17.11.85:9000/system/sparkJar/jars/*.jar 

这里写图片描述

3.调优之后与调优之前的对比

  • 调优之后日志变化:
    这里写图片描述

可以看到它已经不用上传Spark运行时Jar包到分布式缓存中了

  • 看看UI

还是相同的界面:

这里写图片描述

还是看Scheduler Delay

发现Scheduler Delay=313-263=50

与调优之前时间整整缩短了一半,Scheduler Delay从100缩短到了50

<think>好的,我现在需要解决用户在Maven项目中遇到的Jakarta Annotation依赖版本2.1.1报错的问题。首先,用户提到了引用[1]中的依赖配置,可能他们在使用这个版本遇到了错误。我需要先了解常见的导致依赖错误的原因,比如版本不存在、与其他依赖冲突,或者仓库配置问题。 首先,我应该检查Jakarta Annotation API的2.1.1版本是否真的存在。访问Maven中央仓库网站,搜索jakarta.annotation-api,查看可用的版本列表。如果2.1.1不存在,那用户可能是错误地引用了这个版本号,需要更正为正确的版本。例如,可能用户记错了,实际最新版本是2.1.0或其他。 接下来,如果版本号正确,可能是依赖配置有误。比如groupId是否正确,或者是否有拼写错误。用户提供的引用[1]中的groupId是jakarta.annotation,artifactId是jakarta.annotation-api,这看起来是正确的。但版本号需要确认。 另外,可能用户的环境问题,比如本地Maven仓库没有正确下载该依赖,或者网络问题导致下载失败。这候可以建议用户清理本地仓库并重新构建项目,或者检查网络设置。 如果版本确实存在,但与其他依赖存在冲突,可能需要排除冲突的依赖。用户需要检查依赖树,使用mvn dependency:tree命令来查看是否有版本冲突。例如,另一个依赖可能引入了不同版本的jakarta.annotation-api,导致冲突。 另外,用户可能需要升级到更高版本,比如jakarta.annotation-api的2.1.2或更高,如果存在的话。或者,可能用户的项目中使用了其他Jakarta EE组件,需要统一版本号,确保所有Jakarta依赖的版本兼容。 参考引用[2]中的例子,用户之前可能升级了jakarta.servlet-api到6.0.0,所以可能也需要将annotation-api升级到对应的版本。Jakarta的各个组件通常有统一的版本号,比如Jakarta EE 9使用版本2.0.0,Jakarta EE 10使用3.0.0等。如果用户的其他依赖使用较新的版本,而annotation-api的2.1.1可能不兼容,导致错误。 因此,可能的解决方案括:确认正确的版本号是否存在,更正pom.xml中的版本;检查依赖冲突并排除;升级到兼容的版本;或者检查Maven配置和网络问题。需要一步步引导用户进行排查,确保依赖配置正确,版本兼容,并且能够正确下载。</think>为了解决Jakarta Annotation依赖版本$2.1.1$报错的问题,请按照以下步骤排查和修复: --- ### 一、验证依赖配置正确性 1. **检查版本号是否存在** 访问[Maven中央仓库](https://mvnrepository.com/)查询$jakarta.annotation-api$,发现最新版本为$2.1.1$,但该版本未在仓库中发布[^1]。实际可用版本括: ```xml <version>2.0.0</version> <!-- Jakarta EE 9 --> <version>2.1.0</version> <!-- 最新稳定版 --> ``` 2. **修正pom.xml配置** 将版本号改为$2.1.0$: ```xml <dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.0</version> </dependency> ``` --- ### 二、排查依赖冲突 1. **查看依赖树** 执行命令检查版本冲突: ```bash mvn dependency:tree -Dincludes=jakarta.annotation ``` 2. **统一Jakarta组件版本** 如果同使用其他Jakarta依赖(如$jakarta.servlet-api$),需统一版本号: ```xml <properties> <jakarta.version>6.0.0</jakarta.version> </properties> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>${jakarta.version}</version> </dependency> ``` --- ### 三、清理Maven缓存 1. **删除本地仓库残留文件** 定位本地仓库路径(默认在$~/.m2/repository$),删除目录: ```bash rm -rf ~/.m2/repository/jakarta/annotation/ ``` 2. **强制更新依赖** 执行Maven命令重新下载: ```bash mvn clean install -U ``` --- ### 四、兼容性验证 若项目使用Java EE过渡到Jakarta的组件,需确保所有依赖命名空间已从$javax.annotation$迁移到$jakarta.annotation$,例如: ```java import jakarta.annotation.Resource; // 替换 javax.annotation.Resource ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值