【问题标题】:Sending oozie job output to mail ID将 oozie 作业输出发送到邮件 ID
【发布时间】:2016-01-07 03:57:02
【问题描述】:

我有几个命令,比如 hadoop,需要每天执行,结果需要发送到我的邮件 ID。如何使用 oozie JOB 做到这一点?

【问题讨论】:

    标签: hadoop hdfs oozie oozie-coordinator bigdata


    【解决方案1】:

    在 Oozie Coordinator 的帮助下,您可以根据时间和数据触发器提交工作流。您可以在下面找到发送电子邮件的日常协调员工作的示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <coordinator-app name="cord1" frequency="${coord:days(1)}"
                 start="${jobStart}" end="${jobEnd}"
                 timezone="UTC"
                 xmlns="uri:oozie:coordinator:0.4">
      <action name="an-email">
            <email xmlns="uri:oozie:email-action:0.1">
                <to>bob@initech.com,the.other.bob@initech.com</to>
                <cc>will@initech.com</cc>
                <subject>Email notifications for ${wf:id()}</subject>
                <body>The wf ${wf:id()} successfully completed.</body>
            </email>
            <ok to="myotherjob"/>
            <error to="errorcleanup"/>
        </action>
    </coordinator-app>
    

    您可以设置的其他频率如下:

    ${coord:minutes(int n)}
    ${coord:hours(int n)}
    ${coord:days(int n)}
    ${coord:months(int n)}
    

    【讨论】:

    • mobin 是否可以将命令的输出数据邮寄到 body 中的邮件>wf ${wf:id()} 成功完成。
    【解决方案2】:

    将设置以下内容以执行映射操作并在此之后发送电子邮件。在您的 oozie-site.xml 中,添加以下设置并重新启动 oozie。将值替换为特定于您的环境的值。

    <property>
        <name>oozie.email.smtp.host</name>
        <value></value>
    </property>
    <property>
        <name>oozie.email.smtp.port</name>
        <value>25</value>
    </property>
    <property>
    <name>oozie.email.from.address</name>
    <value></value>
    </property>
    <property>
        <name>oozie.email.smtp.auth</name>
    <value>false</value>
    </property>
    <property>
        <name>oozie.email.smtp.username</name>
        <value></value>
    </property>
    <property>
        <name>oozie.email.smtp.password</name>
        <value></value>
    </property>
    

    在您的 workflow.xml 中,将以下说明与您的环境设置一起添加。这包括 mapreduce 完成后的电子邮件触发操作。

    <workflow-app name="WorkFlowJavaMapReduceAction" xmlns="uri:oozie:workflow:0.1">
    <start to="mapReduceAction" />
    <action name="mapReduceAction">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${outputDir}" />
            </prepare>
            <configuration>
                <property>
                    <name>mapred.mapper.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapred.reducer.new-api</name>
                    <value>true</value>
                </property>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
                <property>
                    <name>mapreduce.map.class</name>
                    <value></value>
                </property>
                <property>
                    <name>mapreduce.reduce.class</name>
                    <value></value>
                </property>
                <property>
                    <name>mapred.mapoutput.key.class</name>
                    <value>org.apache.hadoop.io.Text</value>
                </property>
                <property>
                    <name>mapred.mapoutput.value.class</name>
                    <value>org.apache.hadoop.io.IntWritable</value>
                </property>
                <property>
                    <name>mapred.output.key.class</name>
                    <value>org.apache.hadoop.io.Text</value>
                </property>
                <property>
                    <name>mapred.output.value.class</name>
                    <value>org.apache.hadoop.io.IntWritable</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
                <property>
                    <name>mapreduce.job.acl-view-job</name>
                    <value>*</value>
                </property>
                <property>
                    <name>oozie.launcher.mapreduce.job.acl-view-job</name>
                    <value>*</value>
                </property>
                <property>
                    <name>oozie.use.system.libpath</name>
                    <value>false</value>
                </property>
                <property>
                    <name>oozie.libpath</name>
                    <value>${appPath}/lib</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="emailCommands" />
        <error to="killJob" />
    </action>
    
    <action name="emailCommands">
        <fs>
            <mkdir path='${makeDirectoryAbsPath}' />
            <move source='${dataInputDirectoryAbsPath}' target='${dataDestinationDirectoryRelativePath}' />
        </fs>
        <ok to="sendEmailSuccess" />
        <error to="sendEmailKill" />
    </action>
    <action name="sendEmailSuccess">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>${emailToAddress}</to>
            <subject>Status of workflow ${wf:id()}</subject>
            <body>The workflow ${wf:id()} completed successfully</body>
        </email>
        <ok to="end" />
        <error to="end" />
    </action>
    <action name="sendEmailKill">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>${emailToAddress}</to>
            <subject>Status of workflow ${wf:id()}</subject>
            <body>The workflow ${wf:id()} had issues and was killed. The error
                message is: ${wf:errorMessage(wf:lastErrorNode())}</body>
        </email>
        <ok to="end" />
        <error to="killJob" />
    </action>
    
    <kill name="killJob">
        <message>"Killed job due to error:
            ${wf:errorMessage(wf:lastErrorNode())}"</message>
    </kill>
    <end name="end" />    
    </workflow-app>
    

    请参考这篇博文http://webthanga.blogspot.in/2016/01/oozie-map-reduce-action-with-send-mail.html

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多