Ant*_*gor 1 uberjar apache-spark spark-avro spark-submit
我有一个 spark-job,我通常从本地机器提交到 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
Run Code Online (Sandbox Code Playgroud)
我提交的工作就像
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}
Run Code Online (Sandbox Code Playgroud)
为什么新的spark版本拒绝带我的uberjar?我在 spark 2.4 文档中没有发现任何变化。顺便说一句:jar 是用 spark 2.1 作为依赖项构建的。有任何想法吗?
编辑:
我想我的问题是不是与火花未能找到我uberjar事情。更确切地说,我可能对新的内置 avro 功能有问题。和以前一样,我通过使用隐函数读取Avro的文件spark.read.avro从com.databricks.spark.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)
Run Code Online (Sandbox Code Playgroud)
苏。我认为问题更深。我得到的实际错误是:
似乎 spark 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 东西有一些问题。
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |