Я пытаюсь отправить искру в oozie в режиме пряжи-клиента. Когда я запускаю искровую работу вне oozie, она работает нормально. Но когда я отправляю задание oozie, оно продолжает выходить из строя с ошибкой ниже:
Exception in thread "main" java.lang.IllegalStateException: basedir job.jar/lib does not exist.
at org.apache.tools.ant.DirectoryScanner.scan(DirectoryScanner.java:871)
at org.apache.spark.classpath.ClasspathFilter$$anonfun$resolveClasspath$1.apply(ClasspathFilter.scala:47)
at org.apache.spark.classpath.ClasspathFilter$$anonfun$resolveClasspath$1.apply(ClasspathFilter.scala:44)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
at scala.collection.mutable.ArrayOps$ofRef.flatMap(ArrayOps.scala:186)
at org.apache.spark.classpath.ClasspathFilter$.resolveClasspath(ClasspathFilter.scala:44)
at org.apache.spark.classpath.ClasspathFilter$.main(ClasspathFilter.scala:31)
at org.apache.spark.classpath.ClasspathFilter.main(ClasspathFilter.scala)
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
at org.apache.spark.deploy.SparkSubmitArguments.handleUnknown(SparkSubmitArguments.scala:465)
at org.apache.spark.launcher.SparkSubmitOptionParser.parse(SparkSubmitOptionParser.java:178)
at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArguments.scala:104)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:112)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
Сначала я подумал, что он не может загрузить зависимости, связанные с hdfs. Поэтому я добавил зависимость hasoop в свой путь к классам и отправил задание. Но это не сработало.
Позже я создал убер-банку своего приложения и попытался запустить. Все тот же результат.
Если я запустил то же задание в среде mapr 5.x, все будет хорошо, и задание oozie будет успешно выполнено без каких-либо проблем. Но та же работа терпит неудачу в Mapr 6.x env
Кто-нибудь сталкивался с такой же проблемой? Любая помощь приветствуется.
Вот некоторые важные детали:
Mapr version : 6.0.1
Spark version: 2.2.1
Oozie version: 4.3.0
Hadoop version: 2.7.0
@kulssaka: Я опубликовал решение в ответе. Это очень хорошо сработало для меня. Пока с другими проблемами я не сталкивался. Надеюсь, это тебе тоже поможет.




Наконец-то я смог решить проблему.
Проблема была в mapr-spark.env.sh
Здесь значения для MAPR_HADOOP_CLASSPATH были установлены на `/ opt / mapr / spark / spark-2.2.1 / bin / mapr-classpath.sh`
Я изменил значение на MAPR_HADOOP_CLASSPATH = `hadoop classpath`. Это позволило правильно загрузить библиотеки hadoop (особенно hdfs), и задания oozie были выполнены успешно.
большой ! Что касается меня, я использовал команду sed для изменения пути к классам и пути к классам hadoop. Я попрошу ИТ-службу, отвечающую за Oozie, изменить параметры, как вы предложили!
Замена MAPR_HADOOP_CLASSPATH на использование hadoop classpath действительно решила проблему. Мы также заметили, что hadoop classpath возвращает неверную папку для планировщика емкости. ИМХО, hadoop classpath больше для HADOOP_CLASSPATH. Вместо hadoop classpath мы используем mapr classpath. Это возвращает те же библиотеки hadoop и библиотеки mapr, а также исправляет папку планировщика емкости export MAPR_HADOOP_CLASSPATH=$(mapr classpath).
Да ! та же проблема, та же среда! Вы открыли билет MapR?