OOZIE使用Email提醒详解

  下班不在公司,让大数据任务在跑着。到底跑完没有呢?我总不能老主动去公司登录来看吧?是不是该有个任务提醒机制?是的,这就是OOZIE的EMAIL action功能。
 【原理】OOZIE并不是自己拥有个邮件服务器,而是得借助远程的邮箱账户来发送邮件。这里我们假设注册了一个[email protected]的邮箱,使用163的smtp服务器(地址是smtp.163.com)。理论上根据目前OOZIE的原理,只能配置一个账户拿来发送邮件。

 【步骤一】首先配置oozie-site.xml文件,添加email发送者的一系列信息:
    <property>
        <name>oozie.email.smtp.host</name> <!--邮件账户的smtp服务器地址-->
        <value>smtp.163.com</value>
    </property>
    <property>
        <name>oozie.email.from.address</name> <!--邮件账户的发送者邮箱地址-->
        <value>[email protected]</value>
    </property>
    <property>
        <name>oozie.email.smtp.auth</name> <!--是否接受安全认证,根据163邮箱的要求,选择true-->
        <value>true</value>
    </property>
    <property>
        <name>oozie.email.smtp.username</name> <!--邮件账户的用户名-->
        <value>[email protected]</value>
    </property>
    <property>
        <name>oozie.email.smtp.password</name> <!--邮件账户的密码-->
        <value>123456</value>
    </property>

 【步骤二】在workflow.xml中编写email任务节点。假设我们要发送邮件给[email protected]
<workflow-app xmlns='uri:oozie:workflow:0.1' name='Spark_python'>
    <start to='spark-node' />

    <action name='spark-node'>
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <master>${master}</master>
            <name>Spark-python</name>
            <jar>${nameNode}/user/oozie/${examplesRoot}/apps/pythonApp/lib/spark1.py</jar>
        </spark>
        <ok to="goemail" />
        <error to="fail" />
    </action>

    <kill name="fail">
        <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
        </message>
    </kill>
    
    <action name="goemail">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>[email protected]</to>
            <subject>Email notifications for ${wf:id()}</subject>
            <body>The wf ${wf:id()} successfully completed.</body>
        </email>
        <ok to ="end"/>
        <error to ="fail"/>
    </action>
    
    <end name='end' />
    
</workflow-app>

效果如图:
OOZIE使用Email提醒详解


期间遇到的一些问题:
【1、没提供发件者地址,报错】
2017-03-09 02:15:13,055  INFO SparkActionExecutor:520 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000000-170309021355327-oozie-hado-W] ACTION[0000000-170309021355327-oozie-hado-W@spark-node] action completed, external ID [job_1489054353684_0001]
2017-03-09 02:15:13,746  INFO ActionStartXCommand:520 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000000-170309021355327-oozie-hado-W] ACTION[0000000-170309021355327-oozie-hado-W@goemail] Start action [0000000-170309021355327-oozie-hado-W@goemail] with user-retry state : userRetryCount [0], userRetryMax [0], userRetryInterval [10]
2017-03-09 02:15:14,945  WARN ActionStartXCommand:523 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000000-170309021355327-oozie-hado-W] ACTION[0000000-170309021355327-oozie-hado-W@goemail] Error starting action [goemail]. ErrorType [ERROR], ErrorCode [EM007], Message [EM007: Encountered an error while sending the email message over SMTP.]
org.apache.oozie.action.ActionExecutorException: EM007: Encountered an error while sending the email message over SMTP.
at org.apache.oozie.action.email.EmailActionExecutor.email(EmailActionExecutor.java:297)
at org.apache.oozie.action.email.EmailActionExecutor.validateAndMail(EmailActionExecutor.java:171)
at org.apache.oozie.action.email.EmailActionExecutor.start(EmailActionExecutor.java:110)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:234)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:65)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.SignalXCommand.execute(SignalXCommand.java:459)
at org.apache.oozie.command.wf.SignalXCommand.execute(SignalXCommand.java:82)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.ActionEndXCommand.execute(ActionEndXCommand.java:280)
at org.apache.oozie.command.wf.ActionEndXCommand.execute(ActionEndXCommand.java:61)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:244)
at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:56)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:179)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.sun.mail.smtp.SMTPSendFailedException:  553 Local user only ,163 smtp5, jeifwA8dYwg--.16436S2 1429458765
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
at org.apache.oozie.action.email.EmailActionExecutor.email(EmailActionExecutor.java:293)
... 19 more
2017-03-09 02:15:14,962  WARN ActionStartXCommand:523 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000000-170309021355327-oozie-hado-W] ACTION[0000000-170309021355327-oozie-hado-W@goemail] Setting Action Status to [DONE]
【1、解决】在oozie-site.xml中添加发件人From属性:
    <property>
        <name>oozie.email.from.address</name> <!--邮件账户的发送者邮箱地址-->
        <value>[email protected]</value>
    </property>


【2、没进行安全认证,报错】
2017-03-09 17:39:11,059  WARN ActionStartXCommand:523 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000001-170309173451959-oozie-hado-W] ACTION[0000001-170309173451959-oozie-hado-W@goemail] Error starting action [goemail]. ErrorType [ERROR], ErrorCode [EM007], Message [EM007: Encountered an error while sending the email message over SMTP.]
org.apache.oozie.action.ActionExecutorException: EM007: Encountered an error while sending the email message over SMTP.
at org.apache.oozie.action.email.EmailActionExecutor.email(EmailActionExecutor.java:297)
at org.apache.oozie.action.email.EmailActionExecutor.validateAndMail(EmailActionExecutor.java:171)
at org.apache.oozie.action.email.EmailActionExecutor.start(EmailActionExecutor.java:110)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:234)
at org.apache.oozie.command.wf.ActionStartXCommand.execute(ActionStartXCommand.java:65)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.SignalXCommand.execute(SignalXCommand.java:459)
at org.apache.oozie.command.wf.SignalXCommand.execute(SignalXCommand.java:82)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.ActionEndXCommand.execute(ActionEndXCommand.java:280)
at org.apache.oozie.command.wf.ActionEndXCommand.execute(ActionEndXCommand.java:61)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:244)
at org.apache.oozie.command.wf.ActionCheckXCommand.execute(ActionCheckXCommand.java:56)
at org.apache.oozie.command.XCommand.call(XCommand.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.apache.oozie.service.CallableQueueService$CallableWrapper.run(CallableQueueService.java:179)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,163 smtp8,DMCoWDAw--.1042S2 14809951
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
at org.apache.oozie.action.email.EmailActionExecutor.email(EmailActionExecutor.java:293)
... 19 more
2017-03-09 17:39:11,064  WARN ActionStartXCommand:523 - SERVER[bigmaster] USER[hadoop] GROUP[-] TOKEN[] APP[Spark_python] JOB[0000001-170309173451959-oozie-hado-W] ACTION[0000001-170309173451959-oozie-hado-W@goemail] Setting Action Status to [DONE]
【2、解决】在oozie-site.xml中添加认证auth属性并设置为true:
    <property>
        <name>oozie.email.smtp.auth</name> <!--是否接受安全认证,根据163邮箱的要求,选择true-->
        <value>true</value>
    </property>









猜你喜欢

转载自blog.csdn.net/u010770993/article/details/70312488
今日推荐