您的位置:首页 > 运维架构

Hadoop工作流引擎

2015-12-26 12:54 288 查看
前面介绍的JobControl和ChainMapper/ChainReducer仅可看作运行工作流的工具。它们只具备最简单的工作流引擎功能,比如工作流描述、简单的作业调度等。为了增强Hadoop支持工作流的能力,在Hadoop之上出现了很多开源的工作流引擎,主要可概括为两类:隐式工作流引擎和显式工作流引擎。

隐式工作流引擎在MapReduce之上添加了一个语言抽象层,允许用户使用更简单的方式编写应用程序,比如SQL、脚本语言等。这样,用户无须关注MapReduce的任何细节,降低了用户的学习成本,并可大大提高开发效率。典型的代表有Hive、Pig和Cascading。它们的架构如图3-29所示,从上往下分为以下三层。

 





功能描述层:直接面向用户提供了一种简单的应用程序编写方法,比如,Hive使用SQL,Pig使用Pig Latin脚本语言,Cascading提供了丰富的Java API。

作业生成器:作业生成器主要将上层的应用程序转化成一批MapReduce作业。这一批MapReduce存在相互依赖关系,实际上是一个DAG。

调度引擎:调度引擎直接构建于MapReduce环境之上,将作业生成器生成的DAG按照依赖关系提交到MapReduce上运行。

显式工作流引擎直接面向MapReduce应用程序开发者,提供了一种作业依赖关系描述方式,并能够按照这种描述方式进行作业调度。典型的代表有Oozie和Azkaban。它们的架构如图3-30所示,从上往下分为以下两层。

 





工作流描述语言:工作流描述语言用于描述作业的依赖关系。Oozie采用了XML,而Azkaban采用了key/value格式的文本文件。需要注意的是,这里的作业不仅仅是指MapReduce作业,还包括Shell命令、Pig脚本等。也就是说,一个MapReduce可能依赖一个Pig脚本或者Shell命令。

调度引擎:同隐式工作流引擎的调度引擎功能相同,即根据作业的依赖关系完成作业调度。

表3-4对比了显式工作流引擎与Hadoop自带的JobControl的不同之处。尽管它们均用于解决Hadoop工作流调度问题,但是在设计思路、使用方法、应用场景等方面都存在明显的不同。

表3-4 显式工作流引擎与JobControl对比

 





(续)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: