如何使用--packages为spark-submit指定多个依赖项?

dav*_*dev 21 hbase apache-spark spark-streaming

我有以下作为启动火花流工作的命令行.

    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 &
Run Code Online (Sandbox Code Playgroud)

作业无法启动以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

坐标的格式应为groupId:artifactId:version.

所以我所拥有的应该是有效的,并且应该参考这个包.

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

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

zer*_*323 42

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

--packages  org.apache.spark:spark-streaming-kafka_2.10:1.3.0,\
  org.apache.hbase:hbase-common:1.0.0
Run Code Online (Sandbox Code Playgroud)

  • 我发现我还必须删除空格和换行符才能使它成功运行:`--packages org.apache.spark:spark-streaming-kafka_2.10:1.3.0,org.apache.hbase:hbase -common:1.0.0` ... (5认同)

小智 5

我发现在 Spark 版本 3.0.0 中为 mysql 和 postgres 使用 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()
Run Code Online (Sandbox Code Playgroud)