Средство запуска рабочего процесса 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, получить доступ к банке по какому-либо пути или...
local
(т. е. только в контейнере программы запуска Oozie) или в режимеyarn-client
? Еслиyarn-client
, возникает ли исключение в драйвере или в исполнителях (которые не наследуют libpath Oozie иoozie.launcher
props)? - person Samson Scharfrichter   schedule 02.11.2017application_0000_000000
YARN ID еще проще. Это показано в Oozie; тогда как исполнители относятся к другому идентификатору (созданному драйвером, неподконтрольному Узи) - person Samson Scharfrichter   schedule 04.11.2017