проблема зависимостей с библиотекой apache commons cli parser при выполнении команды spark submit - PullRequest
0 голосов
/ 11 января 2019

Я беру параметры для своего приложения для работы с искрой, для которого я использовал 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 с точки зрения конфликта версий.

...