1. What’s cascading?

Cascading项目始于2007年夏天,是一个架构在Hadoop上的API,用来创建复杂和容错数据处理工作流。它抽象了集群拓扑结构和配置来快速开发复杂分布式的应用,而不用考虑背后的MapReduceCascading目前依赖于Hadoop提供存储和执行架构,但是Cascading API为开发者隔离了Hadoop的技术细节,提供了不需要改变初始流程工作流定义就可以在不同的计算框架内运行的能力。


2. Why use cascading?


2.1 Hadoop’s problem

1.map和reduce操作提供了强大的原语操作。然而,在创建复杂的、可以被不同开发者共享的合成性高的代码时,它们粒度级别似乎不合适

2.许多开发者发现当他们面对实际问题的时候,很难用MapReduce的模式来思考问题。


2.2 Cascading’s solution

1.为了解决第一个问题,Cascading用简单字段名和一个数据元组模型值来替代MapReduce使用的键和值,而该模型的元组是由值的列表构成的。

2.对第二个问题,Cascading直接从Map和Reduce操作分离出来,引入了更高层次的抽象:Function,Filter,Aggregator和Buffer。


3. What it’s like?


3.1 Hadoop Dataflow

wKiom1R-3mPQFtGfAAA9R_xZ2MI935.gif


3.2 Cascading Dataflow

字段:表示名称,位置信息,与列名类似。用来表示元组里值的名称或者位置。

元组:Comparable对象数组,类似于行和记录。

wKioL1R-3z-zLClLAABEyzlOdNQ463.gif


3.3 Cascading Pipe

Each管道一次处理一个单独输入元组。可对输入元组执行一个func或者filter。

GroupBy管道在分组字段上对元组进行分组。

CoGroup管道实现相同字段名的连接,类似于SQL中的join。

Every管道可处理由GroupBy或CoGroup产生的的数据,同时可以对分组数据应用Aggretator或Buffer。

SubAssembly管道允许在一个单独的管道内进行循环嵌套流水线处理,或者一个管道被嵌套更加复杂的流水线处理。

wKioL1R-4P7zyUjtAAA7g8498og099.gif


3.4 Cascading Operaton

Function作用于单个输入元组,返回0或多个输出元组,提供Each类型管道使用。

Filter返回Boolean,用于过滤元组数据。

Aggregator对一组元组执行某种操作,这些分组元组是通过一组共同字段分组得到的。常见的Aggregator如求和,计数,均值,最大最小值等。

Buffer与Aggregator类似,但能够动态的往元组中加入值。

wKioL1R-4W2AYSI_AAA76bQYkug089.gif


3.5 Cascading Flow

wKiom1R-4S-htj1hAACK-Mx3JO4031.gif


4 How it works

Cascading框架


wKiom1R-4XbQECgVAAF9je4mOmk897.jpg

wKioL1R-4gLil5okAAGwS-XRdNs319.jpg

Cascading执行流程

wKioL1R-4i6RBI_CAACTEpV8Q8c345.gif


本文部分内容摘自:Hadoop权威指南

部分图片来自网络,部分为根据Hadoop权威指南中图片绘制。