【问题标题】:How to specify multiple dependencies using --packages for spark-submit?如何使用 --packages 为 spark-submit 指定多个依赖项?
【发布时间】:2016-02-28 22:09:16
【问题描述】:

我有以下命令行来启动 Spark 流式传输作业。

    spark-submit --class com.biz.test \
            --packages \
                org.apache.spark:spark-streaming-kafka_2.10:1.3.0 \
                org.apache.hbase:hbase-common:1.0.0 \
                org.apache.hbase:hbase-client:1.0.0 \
                org.apache.hbase:hbase-server:1.0.0 \
                org.json4s:json4s-jackson:3.2.11 \
            ./test-spark_2.10-1.0.8.jar \
            >spark_log 2>&1 &

作业无法启动并出现以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Given path is malformed: org.apache.hbase:hbase-common:1.0.0
    at org.apache.spark.util.Utils$.resolveURI(Utils.scala:1665)
    at org.apache.spark.deploy.SparkSubmitArguments.parse$1(SparkSubmitArguments.scala:432)
    at org.apache.spark.deploy.SparkSubmitArguments.parseOpts(SparkSubmitArguments.scala:288)
    at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:87)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:105)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我已尝试删除格式并返回单行,但这并不能解决问题。我还尝试了很多变体:不同的版本,在 artifactId 的末尾添加 _2.10 等等。

根据文档 (spark-submit --help):

坐标的格式应该是groupId:artifactId:version。

所以我所拥有的应该是有效的并且应该引用this package

如果有帮助,我正在运行 Cloudera 5.4.4。

我做错了什么?如何正确引用 hbase 包?

【问题讨论】:

  • 工作正常吗?就我而言,我还必须通过 --jars 和 --driver-class-path 添加 jars。

标签: apache-spark hbase spark-streaming


【解决方案1】:

@Mohammad 感谢您的意见。这对我也有用。我必须在单个 sparksession 中加载 Kafka 和 msql 包。我做了这样的事情:

spark = (SparkSession .builder ... .appName('myapp') # Add kafka and msql package .config("spark.jars.packages", "org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2,mysql:mysql-connector-java:8.0.26") .getOrCreate())

【讨论】:

    【解决方案2】:

    我发现在 mysql 和 postgres 的 spark 版本 3.0.0 中使用 SparkSession 是值得的

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName('mysql-postgres').config('spark.jars.packages', 'mysql:mysql-connector-java:8.0.20,org.postgresql:postgresql:42.2.16').getOrCreate()
    

    【讨论】:

      【解决方案3】:

      包列表应该使用逗号分隔,不带空格(换行应该可以正常工作),例如

      --packages  org.apache.spark:spark-streaming-kafka_2.10:1.3.0,\
        org.apache.hbase:hbase-common:1.0.0
      

      【讨论】:

      • 我发现我还必须删除空格和换行符才能使其成功工作:--packages org.apache.spark:spark-streaming-kafka_2.10:1.3.0,org.apache.hbase:hbase-common:1.0.0...
      猜你喜欢
      • 2015-06-08
      • 2023-02-12
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2017-07-02
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多