如何使用 --packages 为 spark-submit 指定多个依赖项?
How to specify multiple dependencies using --packages for spark-submit?
我有以下命令行来启动火花流作业。
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(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
):
The format for the coordinates should be groupId:artifactId:version.
所以我所拥有的应该是有效的并且应该引用 this package。
如果有帮助,我是 运行 Cloudera 5.4.4。
我做错了什么?如何正确引用 hbase 包?
包列表应该使用没有空格的逗号分隔(换行应该可以),例如
--packages org.apache.spark:spark-streaming-kafka_2.10:1.3.0,\
org.apache.hbase:hbase-common:1.0.0
我发现值得在 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()
@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())
我有以下命令行来启动火花流作业。
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(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
):
The format for the coordinates should be groupId:artifactId:version.
所以我所拥有的应该是有效的并且应该引用 this package。
如果有帮助,我是 运行 Cloudera 5.4.4。
我做错了什么?如何正确引用 hbase 包?
包列表应该使用没有空格的逗号分隔(换行应该可以),例如
--packages org.apache.spark:spark-streaming-kafka_2.10:1.3.0,\
org.apache.hbase:hbase-common:1.0.0
我发现值得在 spark 版本 3.0.0 中为 mysql 和 postgres
使用 SparkSessionfrom 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()
@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())