복붙노트

[HADOOP] Oozie 자바 잡스 이메일

HADOOP

Oozie 자바 잡스 이메일

우리는 클라우 데라의 CDH 5.4.0 작업, 이메일을 보내 자바 API에서 oozie 작업을 실행하는 데 노력 해왔다. 전자 메일은 SMTP 로그인을 사용하여 보낼 수 있으려면은 activation.jar 및 mail.jar - 두 개의 제 3 자 jar 파일에 의존성이있다. 자바 프로그램은 제 3 자 파일은 파일 시스템의 동일한 폴더에 배치 할 때 IDE / 패키지 JAR 파일에서 잘 작동 이메일을 전송하기 위해 노력하고 있습니다.

우리는 HDFS에 파일을 이동하고 oozie 작업을 구성 할 때, 완료하는 데 실패합니다.

우리는 (email.xml) 다음과 같이 우리의 oozie 작업 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&#39;value&#39;: u&#39;&#39;}]</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 폴더로 배치됩니다 :

lib 디렉토리 폴더에 jar 파일이 자동으로 선택됩니다 포럼에 읽기.

oozie 작업이 자바 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:hdfs@172.16.142.124: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());
        }
    }
}

중단 후 50 %와 - 트리거 작업은 그것의 33 %까지 실행됩니다. 나도 종료하거나 진행됩니다. 어떤 사람이 나를 도울 수 있을까요? 나는 그것의 작업 번이 이메일에 추가 된 첨부 파일이 필요로 나는 oozie의 기본 이메일 프로세스를 사용할 수 없습니다. 나는 activation.jar을하고 email.jar를 사용하여 자바 프로그램에서 작업 할.

작업이 트리거되면, 구성은 같다 :

해결법

  1. ==============================

    1.문제는 HDFS 연결과 관련이 있습니다. 귀하의 Oozie URI, 네임 노드와 JobTracker를이 동일하지 않습니다. 난 당신이 올바른 IP 주소를 사용하여 로컬 호스트를 교체해야합니다 생각합니다.

    문제는 HDFS 연결과 관련이 있습니다. 귀하의 Oozie URI, 네임 노드와 JobTracker를이 동일하지 않습니다. 난 당신이 올바른 IP 주소를 사용하여 로컬 호스트를 교체해야합니다 생각합니다.

  2. ==============================

    2.주 시험 후, 우리는 이메일 oozie 작업에서 보낼 것을 달성했다. 많은 포럼과 친구가 발견 한 것처럼, 문제는 elapsedTime () 함수를 포함하지 않은 구아바 버전이었다.

    주 시험 후, 우리는 이메일 oozie 작업에서 보낼 것을 달성했다. 많은 포럼과 친구가 발견 한 것처럼, 문제는 elapsedTime () 함수를 포함하지 않은 구아바 버전이었다.

    그래서 우리는 다음과 같이 워크 플로우 XML이있는 경우, 그것은 잘 작동합니다

    <workflow-app name="Drill_HDFS_Email" xmlns="uri:oozie:workflow:0.5">
        <start to="java-6abb"/>
        <kill name="Kill">
            <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
        </kill>
        <action name="java-6abb">
            <java>
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <configuration>
                    <property>
                        <name>mapred.queue.name</name>
                        <value>default</value>
                    </property>
                    <property>
                        <name>oozie.launcher.mapreduce.job.classloader</name>
                        <value>true</value>
                    </property>
                    <property>
                        <name>oozie.launcher.mapreduce.job.ubertask.enable</name>
                        <value>false</value>
                    </property>
                </configuration>
                <main-class>com.drill.Emails</main-class>
                <file>/user/oozie/OozieWFConfigs/drillEmailAppDef/lib/DrillJDBC.jar#DrillJDBC.jar</file>
                <file>/user/oozie/OozieWFConfigs/drillEmailAppDef/lib/activation.jar#activation.jar</file>
                <file>/user/oozie/OozieWFConfigs/drillEmailAppDef/lib/mail.jar#mail.jar</file>
                <file>/user/oozie/OozieWFConfigs/drillEmailAppDef/lib/drill-jdbc-all-1.0.0.jar#drill-jdbc-all-1.0.0.jar</file>
            </java>
            <ok to="End"/>
            <error to="Kill"/>
        </action>
        <end name="End"/>
    </workflow-app>
    

    당신이 이미 관찰 할 수 있듯이, 특별히 구아바의 올바른 버전의 수확에 작용하는 두 CONFIGS이있다.

    oozie.launcher.mapreduce.job.classloader = TRUE oozie.launcher.mapreduce.job.ubertask.enable = 거짓

    모든 종속 제 3 자 항아리와 이메일을 보내는 우리의 코드와 항아리 기능은 oozie 워크 플로의 파일로 포함되어 있습니다. 메인 클래스 기능이 포함 된 항아리에 확인하고 집어됩니다.

    일부 포럼에서 우리는 "LIB"폴더에있는 jar 파일이 자동으로 읽어 읽었습니다. 그러나 우리는 명시 적으로 지정하지 않고 작업 없어요. 아마 우리는 여전히 CONFIGS 누락!

    어쨌든이 미래에 누군가가 도움이되기를 바랍니다.

  3. from https://stackoverflow.com/questions/34478748/email-from-oozie-java-jobs by cc-by-sa and MIT license