【问题标题】:How to use custom jars in spark-submit --packages如何在 spark-submit --packages 中使用自定义 jar
【发布时间】:2023-02-12 21:33:21
【问题描述】:

我有一个正在执行 spark 结构化流式传输的 PySpark 项目,为了获取查询指标,我创建了一个 java 项目,该项目侦听微批次事件并将数据记录在日志文件中。当我将 jar 作为文件传递并使用 --jar 在 spark-submit 中读取它时,日志记录工作。

但是,在必须手动上传 jar 之后,此过程涉及手动工作。解决它 将 jar 上传到 JFrog 存储库中。现在,在运行 spark-submit 命令时,我添加了 --repositories 并在 --packages 中添加了坐标,其中已经包含了一些包,如 kafka、avro 等。所有包都是从 jfrog 下载的,但是当它到达 myjar 时,它会抛出以下错误,但是如果我从浏览器尝试它实际上也会下载 jar 和 pom,那么来自日志的 repo url!!!

:: problems summary ::
:::: WARNINGS
        module not found: <myjar>;<version>

    ==== central: tried

      https://<repo>/myjar.pom

      -- artifact <myjar>.jar:

      https://<repo>/myjar.jar

    ==== repo-1: tried

      https://<repo>/myjar.pom

      -- artifact <myjar>.jar:

      https://<repo>/myjar.jar

        ::::::::::::::::::::::::::::::::::::::::::::::

        ::          UNRESOLVED DEPENDENCIES         ::

        ::::::::::::::::::::::::::::::::::::::::::::::

        :: com.spark.extension#<myjar>;<version>: not found

        ::::::::::::::::::::::::::::::::::::::::::::::



:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Exception in thread "main" java.lang.RuntimeException: [unresolved dependency: com.spark.extension#<myjar>;<verion>: not found]
    at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1428)
    at org.apache.spark.deploy.DependencyUtils$.resolveMavenDependencies(DependencyUtils.scala:54)
    at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:308)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:902)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1038)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1047)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Command exiting with ret '1'

编辑- 取自 EMR(省略了一些 url/名称)-

spark-submit --name "A Adapter" --deploy-mode cluster --master yarn --repositories https://<jfrog repo>/artifactory/all/ --packages com.spark.extension:spark-listeners:0.3.8,org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.1,org.postgresql:postgresql:42.2.22,software.amazon.cloudwatchlogs:aws-embedded-metrics:2.0.0-beta-1 --driver-cores 2 --driver-memory 12g --executor-memory 12g --num-executors 1 --executor-cores 2 --conf spark.dynamicAllocation.enabled=true --conf spark.shuffle.service.enabled=true --conf spark.dynamicAllocation.minExecutors=1 --conf spark.dynamicAllocation.maxExecutors=6 --files s3://<url>/log4j.properties,s3://<url>/logging.json --conf spark.yarn.dist.archives=s3://<url>/libs.zip#app-site-packages --conf spark.yarn.appMasterEnv.PYTHONPATH=app-site-packages --conf "spark.yarn.appMasterEnv.SPARK_APP_NAME=A Adapter" --conf spark.yarn.appMasterEnv.CLUSTER_STUB=dev-b1 --conf "spark.yarn.appMasterEnv.AWS_EMF_SERVICE_NAME=A Adapter" --conf spark.yarn.appMasterEnv.AWS_EMF_SERVICE_TYPE=dev-b1-emr --conf spark.yarn.appMasterEnv.AWS_EMF_LOG_GROUP_NAME=dev-b1-spark-structured-stream-logs --conf spark.yarn.appMasterEnv.AWS_EMF_LOG_STREAM_NAME=dev-b1-spark-structured-stream-logs --conf spark.yarn.appMasterEnv.AWS_EMF_AGENT_ENDPOINT=udp://127.0.0.1:25888 --conf spark.driver.extraJavaOptions= --conf spark.executor.extraJavaOptions= --conf spark.executorEnv.PYTHONPATH=app-site-packages --py-files s3://<url>/libs.zip,s3://<url>/jobs.zip,s3://<url>/.env s3://<url>/main.py --job acc

【问题讨论】:

  • 你能提供你的spark-submit命令吗?
  • 嗨@GuyMelul 我在帖子中添加了 spark-submit
  • 我觉得你的命令不错。您可能想检查权限是否有问题。在浏览器中打开可能会使用您现有的身份验证并允许它。使用 curl 进行测试,看看是否可以下载这些文件
  • 验证它,看起来不像是访问问题,它会给出 401。此外,所有其他存储库都已下载,只是失败了。是否有任何特定的方法来构建要在 --package 中使用的 jar? @GuyMelul
  • 仍然坚持这个

标签: apache-spark pyspark spark-submit


【解决方案1】:

您可以使用 https://username:password@jfrog.com/repo,但是您需要指定端口。 https://用户名:密码@jfrog.com:443/repo

我使用 Artifactory 的 Ivy 包类型的“设置”工具发现了这一点。如果您查看解析器 url,它会指定端口。

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2017-12-25
    相关资源
    最近更新 更多