我有个工作,通常是从本地计算机提交到hadoop集群。当我使用spark 2.2.0 提交它时,它可以正常工作,但是当我使用 2.4.0 版本提交时,它无法启动。
只是SPARK_HOME
有所作为。
drwxr-xr-x 18 me 576 Jan 23 14:15 spark-2.4.0-bin-hadoop2.6
drwxr-xr-x 17 me 544 Jan 23 14:15 spark-2.2.0-bin-hadoop2.6
我提交工作
spark-submit \
--master yarn \
--num-executors 20 \
--deploy-mode cluster \
--executor-memory 8g \
--driver-memory 8g \
--class package.MyMain uberjar.jar \
--param1 ${BLA} \
--param2 ${BLALA}
为什么新的Spark版本拒绝使用我的uberjar?我在spark 2.4文档中没有发现任何变化。顺便说一句:jar是用spark 2.1作为依赖项构建的。有什么想法吗?
编辑:
我认为我的问题是否与星火未能在我的uberjar中找到东西有关。相反,我可能对新的内置avro功能有疑问。和以前一样,我使用spark.read.avro
中的隐式函数com.databricks.spark.avro._
读取了Avro文件。 Spark 2.4.0内置了一些新的Avro东西(其中大多数都可以在org.apache.spark:spark-avro_2.*11*:2.4.0
中找到)。失败可能与此有关。
java.lang.ClassNotFoundException: Failed to find data source: org.apache.spark.sql.avro.AvroFileFormat. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:657)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)
at myproject.io.TrainingFileIO.readVectorAvro(TrainingFileIO.scala:59)
at myproject.training.MainTraining$.train(MainTraining.scala:37)
s。我认为问题更深。我得到的实际错误是:
答案 0 :(得分:1)
似乎火花 2.4.0 需要--packages org.apache.spark:spark-avro_2.11:2.4.0
才能运行旧的com.databricks.spark.avro代码行。这里是一些说明https://spark.apache.org/docs/latest/sql-data-sources-avro.html
所以我的问题与我的jar中缺少类无关,而与新的spark版本中的新内置avro东西有一些问题。