Мы работаем с Cloudera cdh 5.4.0 и пытаемся вызвать работу oozie из Java API для отправки электронной почты. Существует зависимость от двух сторонних файлов jar - activation.jar и mail.jar для отправки электронной почты с использованием SMTP Login. Программа JAVA работает, чтобы отправлять почту работает отлично из файлов IDE/пакетов Jar, когда сторонние файлы помещаются в одну и ту же папку в файловой системе.Электронная почта от Oozie Java Jobs
Но когда мы перемещаем файлы в HDFS и пытаемся настроить работу oozie, она не завершается.
У нас есть oozie работу XML, как показано ниже (email.xml):
<workflow-app name="Email" xmlns="uri:oozie:workflow:0.5">
<start to="java-95a1"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="java-95a1">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>org.Emails</main-class>
<java-opts>[{u'value': u''}]</java-opts>
</java>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
</workflow-app>
и вакансии свойства как:
nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
queueName=default
weatherRoot=weather_ooze
mapreduce.jobtracker.kerberos.principal=foo
dfs.namenode.kerberos.principal=foo
oozie.libpath=${nameNode}/user/oozie/share/lib
oozie.wf.application.path=${nameNode}/user/${user.name}/${weatherRoot}
outputDir=weather-ooze
файлы помещаются в папку HDFS как:
/user/oozie/OozieWFConfigs/emailAppDef/EmailJavaProgram.jar /user/oozie/OozieWFConfigs/emailAppDef/email.xml /user/oozie/OozieWFConfigs/emailAppDef/job.properties /user/oozie/OozieWFConfigs/emailAppDef/lib/activation.jar /user/oozie/OozieWFConfigs/emailAppDef/lib/mail.jar
Читать в форуме, что файлы jar, помещенные в папку lib, будут автоматически загружены.
Работа oozie запускается с помощью Java API, как:
import java.util.Properties;
import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.WorkflowJob;
public class oozieclient {
public static void main(String[] args) {
OozieClient wc = new OozieClient("http://hdfs:[email protected]:11000/oozie");
Properties conf = wc.createConfiguration();
conf.setProperty("nameNode", "hdfs://kwt-dev-hdpdn6.hadoop.local:8020");
conf.setProperty("jobTracker", "kwt-dev-hdpdn6.hadoop.local:8032");
conf.setProperty("queueName", "default");
conf.setProperty("oozie.libpath", "${nameNode}/user/oozie/OozieWFConfigs/emailAppDef/lib");
conf.setProperty("oozie.use.system.libpath", "true");
conf.setProperty("oozie.wf.rerun.failnodes", "true");
conf.setProperty("oozieProjectRoot",
"${nameNode}/user/oozie");
conf.setProperty("appPath",
"${oozieProjectRoot}/OozieWFConfigs/emailAppDef");
conf.setProperty(OozieClient.APP_PATH, "${appPath}/email.xml");
// conf.setProperty("inputDir", "${oozieProjectRoot}/data/*/*/*/*/*");
conf.setProperty("outputDir", "${appPath}/output");
try {
String jobId = wc.run(conf);
System.out.println("Workflow job, " + jobId + " submitted");
while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
System.out.println("Workflow job running ...");
Thread.sleep(10 * 1000);
}
System.out.println("Workflow job completed ...");
System.out.println(wc.getJobInfo(jobId));
} catch (Exception r) {
System.out.println("Errors " + r.getLocalizedMessage());
}
}
}
работу, когда срабатывает, работает до его 33% - 50%, а затем вешает. Ни завершение, ни продолжение. Может ли кто-нибудь помочь мне в этом? Я не могу использовать почтовый процесс по умолчанию в oozie, поскольку мне нужно, чтобы вложения добавились в это письмо после его работы. Я хочу, чтобы он работал из java-программы, используя activ.jar и email.jar.
Когда задание запускается, конфигурация, как:
AppPath HDFS: //kwt-dev-hdpdn6.hadoop.local: 8020/пользователь/oozie/OozieWFConfigs/emailAppDef
JobTracker квт-DEV-hdpdn6.hadoop.local: 8032
mapreduce.job.user.name oozie
NameNode HDFS: //kwt-dev-hdpdn6.hadoop.local: 8020
oozie.use.system.libpath истинные
oozie.wf.application.path HDFS: //kwt-dev-hdpdn6.hadoop.local: 8020/пользователь/oozie/OozieWFConfigs/emailAppDef/email.xml
oozie.wf.rerun.failnodes истинные
oozieProjectRoot HDFS: //kwt-dev-hdpdn6.hadoop.local: 8020/пользователь/jinith.joseph
OutputDir HDFS: // квт-DEV-hdpdn6 .hadoop.местный: 8020/пользователь/oozie/OozieWFConfigs/emailAppDef/выход
ИмяОчереди по умолчанию
user.name oozie
IMHO ваша проблема похожа на «не-вопрос» OOZIE-2066 (https://issues.apache.org/jira/browse/OOZIE-2066) >>> просто попробуйте установить 'mapreduce.job.user.classpath .first' свойство 'true' (с Hadoop 2.x; альтернативы, показанные на SO post, упомянутые в ссылке, показанной внизу обсуждения OOZIE-2066) –
Обратите внимание, что в контексте задания запуска Oozie« путь класса пользователя »означает ваши JAR ** и ** Oozie ShareLib, если таковые имеются ** и ** JAR Oozie, используемые для начальной загрузки пусковой установки. В случае, если Oozie отправляет более старую версию, результат будет ... случайным (например, HDP 2.3.2 отправляет старый «httpcore» с Hadoop, еще более старым с Oozie и более новым с Hive ShareLib - всегда #FAIL без «пользователя» classpath first "и 0.5 вероятность #FAIL с ним). –