Я беру параметры для своего приложения для работы с искрой, для которого я использовал apache.commons.cli.DefaultParser, и это вызывает у меня проблемы, когда я запускаю свою команду spark submit, но работает отлично, когда я запускаю мое приложение для искры на IntelliJ .
build.sbt
name := "hp"
version := "0.1"
scalaVersion := "2.11.12"
resolvers += "Job Server Bintray" at "https://dl.bintray.com/spark-jobserver/maven"
assemblyJarName in assembly := "myapp.jar"
mainClass in assembly := Some("com.myaapp.jobs.App")
//assemblyShadeRules in assembly ++= Seq(
// ShadeRule.rename("com.apache.commons.**" -> "shadedcommons.@1")
// .inLibrary("com.apache" % "commons" % "1.2")
// .inProject
//)
libraryDependencies ++= Seq(
"com.fasterxml.jackson.core" % "jackson-core" % "2.1.1",
"com.fasterxml.jackson.core" % "jackson-annotations" % "2.1.1",
"com.fasterxml.jackson.core" % "jackson-databind" % "2.1.1",
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % "2.1.1",
"com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.9.7",
"commons-cli" % "commons-cli" % "1.2",
"org.apache.spark" %% "spark-sql" % "2.3.0"
)
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.3.0"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Я передаю аргументы своему искру-подчиненному следующим образом
spark-submit --master local --driver-memory 2g --executor-memory 2g --class com.myapp.jobs.App /home/leroy/Documents/projects/myapp/target/scala-2.11/myapp.jar -c /home/leroy/Documents/projects/myapp/src/main/resources/configuration.json
Это дает мне следующую ошибку, когда я делаю искру-отправку
2019-01-12 00:04:19 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.commons.cli.Options.getOptionGroups()Ljava/util/Collection; from class org.apache.commons.cli.DefaultParser
Также, когда я запускаю sbt compile , я получаю следующую ошибку.
[info] Compiling 22 Scala sources and 1 Java source to /home/leroy/Documents/projects/myapp/target/scala-2.11/classes ...
[error] /home/leroy/Documents/projects/hp-app/src/main/scala/com/myapp/jobs/config/ConfigurationFactory.scala:9:8: object DefaultParser is not a member of package org.apache.commons.cli
[error] import org.apache.commons.cli.{DefaultParser, Options}
[error] ^
[error] /home/leroy/Documents/projects/hp-app/src/main/scala/com/myapp/jobs/config/ConfigurationFactory.scala:18:31: not found: type DefaultParser
[error] private val cliParser = new DefaultParser
Я даже пытался использовать затененный плагин, который я прокомментировал в моем файле build.sbt выше.
Я попытался изменить анализатор в моем коде, чтобы использовать CommandLineParser, но он устарел.
Нужно знать, если я что-то упускаю в сборке SBT с точки зрения конфликта версий.