Oozie's Spark Submit использует метод ivy 2.4, отсутствующий в CDH 5.9.2.

Средство запуска рабочего процесса oozie иногда дает сбой (статус KILLED) из-за порядка загрузки пути к классам. В SparkSubmit существует вызов метода в ivy 2.4.0, но этого конкретного метода нет в ivy 2.0.0-rc2. Рабочий процесс обычно проходит нормально (УСПЕШНО) в течение большинства номинальных почасовых промежутков времени, но запуск редко завершается сбоем, поскольку загружается ivy 2.0 вместо ivy 2.4. В случае сбоя (отредактированный) журнал запуска oozie показывает этот вызов стека:

2017-10-31 20:37:30,339 WARN org.apache.oozie.action.hadoop.SparkActionExecutor: SERVER[xxxx-oozie-lv-102.xxx.net] USER[xxxxx] GROUP[-] TOKEN[] APP[xxxx-proc-oozie] JOB[0143924-170929213137940-oozie-oozi-W] ACTION[0143924-170929213137940-oozie-oozi-W@xxxx] Launcher exception: org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.setDefaultConf(Ljava/lang/String;)V
java.lang.NoSuchMethodError: org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.setDefaultConf(Ljava/lang/String;)V
    at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1054)
    at org.apache.spark.deploy.SparkSubmit$.prepareSubmitEnvironment(SparkSubmit.scala:287)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:154)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
    at org.apache.oozie.action.hadoop.SparkMain.runSpark(SparkMain.java:264)
    at org.apache.oozie.action.hadoop.SparkMain.run(SparkMain.java:214)
    at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:60)
    at org.apache.oozie.action.hadoop.SparkMain.main(SparkMain.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:233)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1912)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

Похоже, что Cloudera Distributed Hadoop содержит ivy 2.0.0-rc2, но для его SparkSubmit требуется версия ivy 2.4.0. Я попытался включить ivy 2.4 в свою банку и исключить 2.0, но это еще до того, как мой процесс запущен (так что, возможно, это немного нелепо). Я полагаю, что должен быть способ заставить версию 2.4.0 иметь некоторый приоритет в процессе загрузки oozie и попытаться oozie.launcher.mapreduce.user.classpath.first принять значение true или false. В любом случае файл свойств задания содержит/должен содержать:

oozie.libpath=${nameNode}/user/spark/share/XXXX-spark/
oozie.use.system.libpath=true

Примечание. Добавление ivy в указанный выше путь к библиотеке, похоже, не имело значения.

It's likely that the workflow needs an extra flag or ... like this:

<configuration>
   <property>
      <name>oozie.launcher.mapreduce.map.java.opts</name>
      <value>-verbose</value>
   </property>
</configuration>

Команда (SRE), управляющая кластером, предпочитает использовать оригинальные jar-файлы с CDH 5.9.2.

Как я могу заставить spark-submit использовать ivy 2.4 (а не 2.0), изменив workflow.xml, свойства задания, мою сборку или ... таким образом, чтобы удовлетворить требования SRE для сохранения целостности CDH? Могу ли я решить эту проблему, аннулировав кеш.

Имейте в виду, что упоминание о добавлении банки ivy 2.4.0 в путь к классам требует некоторых подробностей о том, где именно разместить банку ivy на hdfs, получить доступ к банке по какому-либо пути или...


person codeaperature    schedule 31.10.2017    source источник
comment
Запускаете ли вы задание Spark в режиме local (т. е. только в контейнере программы запуска Oozie) или в режиме yarn-client? Если yarn-client, возникает ли исключение в драйвере или в исполнителях (которые не наследуют libpath Oozie и oozie.launcher props)?   -  person Samson Scharfrichter    schedule 02.11.2017
comment
Аналогично stackoverflow.com/questions/42689304/   -  person Samson Scharfrichter    schedule 02.11.2017
comment
1-й: эта проблема похожа на community.cloudera.com/t5/Batch-Processing-and-Workflow/…. 2nd @SamsonScharfrichter ... Эта проблема возникает при использовании режима кластера пряжи с использованием режима клиента по умолчанию и отображается в журнале рабочего процесса. Я не уверен, отвечаю ли я на вторую часть вашего вопроса. Я попробовал предложения по ссылке, но все еще не прошел прогон № 17 - типичный сбой.   -  person codeaperature    schedule 03.11.2017
comment
Если бы всегда существовал конфликт между, скажем, двумя JAR-файлами для версии 2.0 и одним для версии 2.4 со случайным размещением в ПУТИ К КЛАССУ, то ваша работа не выполнялась бы в 66% случаев для каждого исполнителя, т. е. › 99% время, если у вас много исполнителей. Тот факт, что сбои редки, намекает на то, что проблема возникает только на определенных узлах с несколько иной конфигурацией. Таким образом, вы должны отслеживать журналы YARN для драйвера Spark и исполнителей Spark и делать некоторую статистику на каждый узел, на котором запущен контейнер — так вы можете доказать своим SRE, что это все их вина, и у них есть некоторые реконфиг делать.   -  person Samson Scharfrichter    schedule 04.11.2017
comment
А если проблема действительно связана с лаунчером Oozie, то получить точный application_0000_000000 YARN ID еще проще. Это показано в Oozie; тогда как исполнители относятся к другому идентификатору (созданному драйвером, неподконтрольному Узи)   -  person Samson Scharfrichter    schedule 04.11.2017
comment
@SamsonScharfrichter У меня точно такая же проблема, и это происходит с исполнителями, а НЕ с драйвером.   -  person Mike Pone    schedule 04.01.2018


Ответы (1)


Cloudera Spark, который находится по адресу https://github.com/cloudera/spark/blob/cdh5-1.6.0_5.9.2/pom.xml, использует Ivy 2.4.0, но дистрибутив CDH поставляется с Ivy 2.0.0-rc2.

Чтобы решить эту проблему, в hdfs folder = /user/oozie/share/lib/lib_{timestamp}/spark jar ivy 2.0.0-rc2 был заменен на версию 2.4 (которая странно называется org.apache.ivy_ivy-2.4.0.jar... но я не думаю, что это имеет значение). После замены банки, запуска действия администратора oozie (oozie admin -sharelibupdate spark для очистки/повторного сканирования этой папки), запуск процесса работал нормально, когда рабочий процесс был запущен после этого.

В соответствии с комментариями Самсона, кеш плюща различался на некоторых узлах из-за того, что новые узлы добавлялись позже, и это вызывало нечастую / прерывистую проблему.

person codeaperature    schedule 08.11.2017