分享

Oozie分布式任务的工作流——邮件篇

xingoo 2016-11-17 22:04:39 发表于 技术应用 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 10255
本帖最后由 xingoo 于 2016-11-17 22:07 编辑

Oozie分布式任务的工作流——邮件篇

在大数据的当下,各种spark和hadoop的框架层出不穷。各种高端的计算框架,分布式任务如乱花般迷眼。你是否有这种困惑!——有了许多的分布式任务,但是每天需要固定时间跑任务,自己写个调度,既不稳定,又没有可靠的通知。
那么你应该是在找——Oozie。
Oozie是一款支持分布式任务调度的开源框架,它支持很多的分布式任务,比如map reduce,spark,sqoop,pig甚至shell等等。你可以以各种方式调度它们,把它们组成工作流。每个工作流节点可以串行也可以并行执行。

如果你定义好了一系列的任务,就可以开启工作流,设置一个coordinator调度器进行定时的调度了。

有了这些工作以后,还需要一个很重要的环节—— 就是邮件提醒。不管是任务执行成功还是失败,都可以发送邮件提醒。这样每天晚上收到任务成功的消息,就可以安心睡觉了。

因此,本篇就带你来看看如何在Oozie中使用Email。

Email Action
在Oozie中每个工作流的环节都被设计成一个Action,email就是其中的一个Action.

Email action可以在oozie中发送信息,在email action中必须指定接收的地址,主题subject和内容body。在接收地址参数中支持使用逗号分隔,添加多个邮箱地址。

email action是同步执行的,因此必须等到邮件发出后,这个action才算完成,才能执行下一个action。

email action里面的所有参数都可以使用EL表达式。

语法规则
[mw_shl_code=xml,true]
<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>
[/mw_shl_code]

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

主题subject和正文body用于指定邮件的标题和正文,email-action:0.2支持text/html这种格式的正文,默认是普通的文本"text/plain"
attachment用于在邮件中添加一个hdfs文件的附件,也可以通过逗号分隔符指定多个附件。如果路径声明的不全,那么也会被当做hdfs中的文件。本地文件是不能添加到附件中的。
配置

email action需要在oozie-site.xml中配置SMTP服务器配置。下面是需要配置的值:
oozie.email.smtp.host
这个值是SMTP服务器的地址,默认是loalhost
oozie.email.smtp.port
是SMTP服务器的端口号,默认是25.
oozie.email.from.address
发送邮件的地址,默认是oozie@localhost
oozie.email.smtp.auth
是否开启认证,默认不开启
oozie.email.smtp.username
如果开启认证,登录的用户名,默认是空
oozie.email.smtp.password
如果开启认证,用户对应的密码,默认是空

PS. 在linux可以通过find -name oozie-site.xml在当前目录下查找。在我们的CDH版本中这个文件在./etc/oozie/conf.dist/oozie-site.xml

样例



[mw_shl_code=xml,true]
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1">
...
<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>
...
</workflow-app>
[/mw_shl_code]

上面的例子中,邮件发给了bob,the.other.bob以及抄送给will,并指定了邮件的标题和正文以及workflow的id。


已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条