oozie 可以在 action 中添加 email 标签, email 的发出是同步的,必须等到email 发出才能执行下一个 action. 则我们可以通过设置 email action,来让任务执行完成之后进行通知.

workflow 语法如下:

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.1">
    ...
    <action name="[NODE-NAME]">
        <email xmlns="uri:oozie:email-action:0.2">
            <to>[COMMA-SEPARATED-TO-ADDRESSES]</to>
            <cc>[COMMA-SEPARATED-CC-ADDRESSES]</cc> <!-- cc is optional -->
            <subject>[SUBJECT]</subject>
            <body>[BODY]</body>
            <content_type>[CONTENT-TYPE]</content_type> <!-- content_type is optional -->
            <attachment>[COMMA-SEPARATED-HDFS-FILE-PATHS]</attachment> <!-- attachment is optional -->
        </email>
        <ok to="[NODE-NAME]"/>
        <error to="[NODE-NAME]"/>
    </action>
    ...
</workflow-app>

to和cc命令指定了谁来接收邮件。可以通过逗号分隔来指定多个邮箱地址。to是必填项,cc是可选的。

主题subject和正文body用于指定邮件的标题和正文,email-action:0.2支持text/html这种格式的正文,默认是普通的文本"text/plain"

attachment用于在邮件中添加一个hdfs文件的附件,也可以通过逗号分隔符指定多个附件。如果路径声明的不全,那么也会被当做hdfs中的文件。本地文件是不能添加到附件中的。

配置

在使用 workflow email action之前 要配置 发出邮件的账户地址. 配置 conf/oozie-site.xml

set oozie.email.smtp.host = <SMTP服务器的地址>
set oozie.email.smtp.port = <SMTP服务器的端口号,默认为25>
set oozie.email.from.address = <发送邮件的地址,默认是oozie@localhost>
set oozie.email.smtp.auth = <是否开启认证,默认 false>
set oozie.email.smtp.username = <如果开启认证,登录的用户名,默认是空>
set oozie.email.smtp.password = <如果开启认证,用户对应的密码,默认是空>