Oozie:Hadoop工作调度工具

jopen 9年前

在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。在Hadoop生态圈中,有一个相对比较新的组件叫做Oozie,它让我们可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

Oozie:Hadoop工作调度工具

Oozie是服务于hadoop生态系统的工作流调度工具,job运行平台是区别于其他调度工具的最大的不同。但其实现的思路跟一般调度工具几乎完全相同。

  1. 作为调度系统两大核心:依赖和触发。依赖可以是条件依赖,比如,资源依赖,依赖于某些数据文件的存在,也可以是任务依赖,比如依赖于另一个job 的完成。在oozie里,每一个job对应一个action节点,这个节点可以是java,hadoop FS,mapred,hive,sqoop,OS shell等等。job之间的依赖通过动作节点完成,fork,join等。触发主要指时间触发。依赖和触发在动作的方向上是相互的,依赖是必要条件,而 触发是充分条件。
  2. 调度系统本身不会去执行具体的job,而是将job相关的所有资源发送到真实的执行环境,比如hadoop jobtractor,hive client,关系型数据库系统等等,自己仅仅记录并监视job的执行状态,并对其状态的变化作出相应的动作,比如,job失败可以重新运行,job成功 转到下一个节点。发送job的过程是一个非阻塞的行为,个别例外(比如hadoop fs操作)。
  3. 调度系统本身可以是任意程序,例如,linux上的一个脚本程序发起的精灵进程,一个web 工程,也可以是个GUI的软件工具。

Oozie作为一个调度引擎,是不同于hadoop的jobtracker实现的调度器的,虽然两者均为“Schedule”之意。Oozie负责 任务的调度分发,是指从提交作业的本地,将资源发送到job运行环境,比如hadoop集群。这个“分发”行为发生在hadoop集群外。而 jobtracker是将hadoop作业拆分成若干个mapreduce job,分派给tasktracker去执行。这个“分发”行为发生在hadoop集群内,是应用程序本身的功能,它可以自己选择job执行的先后顺序, 或者停止一个正在执行的job,让出资源给另一个job,控制的更为精细。跟传统意义上的调度工具含义不同。

Oozie工作流

  • Oozie工作流通过HPDL(一种通过XML自定义处理的语言,类似JBOSS JBPM的JPDL)来构造。
  • Oozie工作流中的Action在运程系统运行如(Hadoop,Pig服务器上).一旦Action完成,远程服务器将回调Oozie的接口 并通知Action已经完成,这时Oozie又会以同样的方式执行工作流中的下一个Action,直到工作流中所有Action都完成(完成包括失败)。
  • Oozie工作流中包含可控制的工作流节点(control flow node)和Action节点(action node)。
  • Control flow node其实可以理解为Oozie的语法,比如可以定义开始(start),结束(end),失败(fail)节点.开始节点就表示从该节点开始运行.同 时也提供一种机制去控制工作流的执行过程,如选择(decision),并行(fork),join节点。
  • Oozie工作流提供各种类型的Action用于支持不同的需要,如Hadoop Map/Reduce,Hadoop File System,Pig,SSH,HTTP,Email,Java,以及Oozie子流程.Oozie也支持自定义扩展以上各种类型的Action。
  • Oozie工作流允许自定义参数,如${inputDir}。
  • 例如wordcount的例子:启动后执行”mapreduce wordcount”,如果成功执行end,如果失败执行kill。配置打包后通过OozieClient提交给Hadoop就直接可以运行了

Oozie任务分为三种模式:

  • workflow – 这种方式最简单,就是定义DAG来执行。
  • coordinator – 它构建在workflow工作方式之上,提供定时运行和触发运行任务的功能。
  • bundle – bundle的作用就是将多个coordinator管理起来。这样我们只需要提供一个bundle提交即可。然后可以start/stop/suspend/resume任何coordinator。

如果想通过Oozie调度远程服务器上的命令,可以通过ssh action来执行任意的shell命令。用户必须明确的上传所需要的第三方库。Oozie通过Hadoop的分布式缓冲来上传、打标签、使用。 Shell命令会在任意一个hadoop计算节点上运行,但是计算节点上默认安装的工具集可能会不一样。不过在所有的计算节点上,通常都装有大部分普通的 unix工具。因此需要明确的很重要的一点是:Oozie只支持有被安装到计算节点上的命令或者通过分布式缓存上传的命令。也就是说,我们必须通过 file上传我们要用到的文件。

参考资料:

引用地址:http://www.biaodianfu.com/oozie.html