整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

16.5.1字段、元组和管道

hadoop 花牛 13℃ 0评论

MapReduce模型使用键和值的形式把输入数据和Map函数,Map函数和 Reduce函数以及Reduce函数和输出数据联系起来。

但据我们所知,实际的Hadoop应用程序通常会使用多个关联的MapReduce 作业。看一下用MapReduce模型实现的一个典型的字数统计例子。如果需 要根据统计出来的数值进行降序排列,这是一个可能的要求,它将需要启 动另一个MapReduce作业来进行这项工作。

因此,理论上来说,键和值的模式不仅把Map和Reduce绑定到起,它 也把Reduce和下一次的Map绑定了,这样一直进行下去(16-11)。更确 切地说,键/值对源自输入文件,流过MapReduce操作形成的操作链, 并且最后终止到一个输出文件。实现足够多这样链接的MapReduce应用程 序,便能看出一系列定义良好的键/值操作,它们被一遍一遍地执行来修改 键/值数据流的内容。

Cascading系统通过使用具有相应字段名的元组(与关系型数据库中的表名和 列名类似)来替代键/值模式的方法来简化这一处理流程。在处理过程中,由 这些字段和元组组成的流数据在它们通过用户定义的、由管道(pipe)链接在 一起的操作时得以处理(16-12)image.png

图16-11.基于MapReduce的计数和排序

image.png

图16-12.由字段和元祖链接的管道

因此,MapReduce的键和值形式被简化成如下形式。

• 字段 字段是一个String(字符串)类型的名称(如“first_name”)、 表示位置信息的数值(2-1分别瘥第三和最后一个位置)或是两 者混合使用的集合,它与列名非常像。因此字段用来声明元组里值 的名称和通过名称在元组中选出对应的值。后者就像执行SQL的 select 语句。

• 元组 元组就是由java.lang.Comparable类对象组成的数组。元组与数据库中的行或记录类似。

Map个Reduce操作都被抽象隐藏到一个或多个管道实例之后(图16-13)

image.png

图16-13 管道类型

•  Each Each管道一次只处理一个单独的输入元组。它可以对输入 元组执行一个Function或一个Filter操作(后文马上要介绍)

•  GroupBy GroupBy管道在分组字段上对元组进行分组。该操作类 似于SQLgroup by语句。如果元组的字段名相同,它也能把多 个输入元组数据流合并成一个元组数据流。

• CoGroup CoGroup管道既可以实现元组在相同的字段名上连接, 也可以实现基于相同字段的分组。所有的标准连接类型(内连接一 inner join,外连接一outer join)以及自定义连接都可以用于两个 或多个元组数据流。

• Every Every管道每次只处理元组的一个单独分组的数据,分组数 据可以由GroupByCoGroup管道产生。Every管道可以对分组 数据应用AggregatorBuffer操作。

• SubAssembly SubAssembly管道允许在一个单独的管道内部进行循环嵌套装配组件,或反过来,一个管道也可以被嵌入更加复杂 的流水线处理中。

所有这些管道被开发者连在一起形成“管道装配处理流程”,这里每个装 配线可以有很多输入元组流(源数据,source)和很多输出元组流(目标数据, sink),‘如图 16-14 所示。

image.png

图16-14.简单的管道装配线

从表面上看来,这可能比传统的MapReduce模型更复杂。并且,不可否 认,相较于Map, Reduce, KeyValue,这里涉及的概念更多。但实际 上,我们引入了更多的概念,它们都可以相互协作来提供不同的功能。

例如,如果一个开发者想对reducer的输出值提供“辅助排序”功能,她将 需要实现以下类:MapReduce、一个“合成” Key(嵌套在父Key中的两 个Key)、值、partitioner、一个用于“输出值分组”的comparator和一个 “输出键”的comparator,所有这些概念以各种方式结合协作使用,并且在 后续的应用中几乎不可重用。

在Cascading里,这项工作只对应一行代码:new GroupBy(<previous>, groupingfields〉,〈secondary sorting fields〉),其中 previous 是数据源管道。

转载请注明:全栈大数据 » 16.5.1字段、元组和管道

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址