You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在spark-submit中使用存储在Artifactory中的JAR包?

可行解决方案

方案1:直接通过--jars拉取Artifactory JAR(适配你尝试1的场景)

你之前尝试--jars带URL凭证失败,是因为Spark拉取HTTP资源依赖Hadoop的HttpFileSystem,默认不识别URL中嵌入的username:password@格式认证信息,需要单独配置HTTP认证参数:

spark-submit \
  # 配置Hadoop HTTP客户端基础认证
  --conf spark.hadoop.fs.http.client.authentication.type=basic \
  --conf spark.hadoop.fs.http.client.username=你的Artifactory用户名 \
  --conf spark.hadoop.fs.http.client.password=你的Artifactory密码/API密钥 \
  --jars https://你的JFrog端点/完整的JAR包路径 \
  # 其余Spark配置、主类、应用参数等

如果担心命令行明文泄露凭证,可以把密码换成Artifactory账号生成的只读API密钥,也可以将上述两个Hadoop配置项写入集群的core-site.xml文件统一管理。

方案2:通过--packages + Maven配置拉取(适配你尝试2、3的场景)

这种方式适合拉取多个有依赖关系的JAR包,稳定性更高,步骤如下:

  1. 先在本地~/.m2/settings.xml中配置Artifactory认证信息,避免把凭证写在命令行:
<settings>
  <servers>
    <server>
      <!-- id要和后续spark-submit指定的仓库标识对应 -->
      <id>artifactory-private</id>
      <username>你的Artifactory用户名</username>
      <password>你的Artifactory密码/API密钥</password>
    </server>
  </servers>
</settings>
  1. 编写spark-submit命令:
spark-submit \
  --packages 目标JAR的Maven坐标(格式为groupId:artifactId:版本号) \
  --repositories https://你的JFrog端点/artifactory/对应Maven仓库名 \
  # 其余Spark配置、主类、应用参数等

如果需要自定义Ivy规则,可额外加参数--conf spark.jars.ivySettings=/path/to/你的ivysettings.xml,注意要保证ivysettings中配置的仓库id和settings.xml中的server id完全一致,否则会出现认证失败伪装成404的问题。

常见问题排查

  • 若返回路径解析错误,先确认Artifactory中JAR包的Maven坐标、仓库路径完全匹配你填写的参数,快照版本需要在仓库地址后缀加snapshots标识
  • 若仍提示NotFound,可开启Spark DEBUG日志查看实际请求的响应码,确认是路径问题还是认证问题

内容的提问来源于stack exchange,提问作者Mark Wan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:08