最近项目需要用到OOzie工具,可是找了好久,也没有找到一个完整的、统一的解决和部署方案。经过努力,终于打通了其中的所有环节,解决了各种坑爹的问题。
首先,就项目需求做一个简单的介绍:
项目需要从mysql中导入数据到hive进行离线计算后,再导回到mysql。过程很简单,所有流程通过shell脚本实现了调度。
问题描述:shell调度脚本执行很好,但是放到Oozie上调度执行,却发现了各种坑。第一个大坑页面上运行结果显示成功,但是结果表中却并没有数据。显然,执行的过程中肯定有环节出了问题。
解决策略: 将调度脚本中的各个流程分拆开来,单独放到一个shell脚本中,然后用Oozie调度执行。具体分拆步骤如下:
一、shell 脚本中执行shell脚本。
在cloudera 的官网(http://gethue.com/use-the-shell-action-in-oozie/)上给出了一个demo,但是只是执行shell脚本自身。那对于shell脚本中执行shell脚本的情况,与demo中的方法类似。也要指明shell脚本的名称以及路径。如图1所示:
需要注意的是:1、文件的权限必须具有可执行权限。本例采用了“777”权限。 2、第一个输入框处填包含后缀的文件名,文件部分的输入框要包含调度脚本和被调度脚本的完整文件名(包含路径和后缀),且都具有可执行权限。
图1 shell脚本中包含shell脚本</