Hadoop--07--MapReduce高级编程

<1>. Changing MapReduce jobs

1.1 Chaining MapReduce jobs in a sequence

MapReduce程序能够执行一些复杂数据处理的工作,通常的情况下,需要将这个任务task分割成多个较小的subtask,然后每个subtask通过hadoop中的job运行完成,然后教案subtask的结果收集起来,完成这个复杂的task。

最简单的就是“顺序”执行了。编程模型也比较简单。我们知道在MapReduce编程中启动一个任务JobClient.runJob(),这时仅仅到这个任务job完成了之后,该语句才能结束,所以如果想要顺序执行任务的话,只需要在每个任务完成之后重新开始一个新的任务。

1.2 Chaining MapReduce jobs with complex dependency

但是在更多的情况下仅仅按照顺序执行是完全不够的,在hadoop中提供了JobContrl类来封装一系列的job和这些job之间的依赖关系。

JobControl中提供了addJob方法将一个job添加到这个job的集合中;

同时每个每个job类提供了addDependingJob方法。

例如,我们现在需要运行5个job:job1, job2, job3, job4, job5,如果job2需要在job1运行完成之后,运行;job4需要在job3运行完成之后运行,最终job5需要在job2和job4运行完成之后才能运行。那么这时可以这样建立模型:

1.3 Chaining preprocessing and postprocessing steps

hadoop中一个每个任务可以有多个Mapper和Reducer,这时程序的执行顺序如下:

The Mapper classes are invoked in a chained (or piped) fashion, the output of the first becomes the input of the second, and so on until the last Mapper, the output of the last Mapper will be
written to the task‘s output.

也就是类似于linux下的管道命令mapper1 | mapper2 | reducer1 | mapper3 | mapper4。

<2>. Joining data from different sources

如果存在这样的两个数据源Customers和Orders,

如果我们想要分析这个数据的话, 这时就需要使用hadoop的datajoin功能。首先我们来看看hadoop data join的流程。

首先map函数从Customers和Orders中读取数据,输出<K1-2, V1-2>,<K2-1, V2-1>;

然后hadoop开始partition,shuffle,这时和原先处理不同的是这里将把group key相同的打包,发送到一个reduce函数中;

这时reduce函数得到的将是group key相同的一组数据。

然后在reduce函数中,将执行data join形成combination,然后将combination发送到combine()函数输出每个结果record。

在hadoop中存在DataJoinMapperBase基类和DataJoinReducerBase基类用来实现data join。对于data join的mapper需要继承自DataJoinMapperBase,并且该mapper需要实现三个方法:

对于需要实现data join的reducer而言,需要继承自DataJoinReducerBase,这时需要重写方法combine,首先需要明确的是combine作用的对象:

For each tuple in the cross product, it calls the following method, which is expected to be implemented in a subclass. protected abstract TaggedMapOutput combine(Object[] tags, Object[] values); The
above method is expected to produce one output value from an array of records of different sources.

combine显然是针对的是an array of records of different sources,即:

也就是说combine仅仅是负责得到最终的输出格式。

时间: 2024-12-20 20:17:19

Hadoop--07--MapReduce高级编程的相关文章

MapReduce高级编程2

MapReduce Top N .二次排序,MapJoin: TOP N 对于一组输入List(key,value),我们要创建一个Top N 列表,这是一种过滤模式,查看输入数据特定子集,观察用户的行为. 解决方案 key是唯一键,需要对输入进行额外的聚集处理,先把输入分区成小块,然后把每个小块发送到一个映射器中.每个映射器会创建一个本地Top N 列表发送到一个规约器中,即最终由一个规约其产生一个Top N 列表.对于大多数的MapReduce算法,由一个规约器接收所有数据会使负载不均衡,从

Hadoop学习笔记(7) ——高级编程

Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成<key, value>. 2.映射(map):根据输入的<key, value>进生处理, 3.合并(combiner):合并中间相两同的key值. 4.分区(Partition):将<key, value>分成N分,分别送到下一环节. 5.化简(Reduce):将中间结

Hadoop高级编程—构建与实现大数据解决方案pdf

下载地址:网盘下载 内容简介  · · · · · · 如果你已经准备好要充分实施大规模可扩展性数据分析工作,那么需要知道如何利用Hadoop技术.这本<Hadoop高级编程--构建与实现大数据解决方案>可以帮助你做到这一点!本书关注用于构建先进的.基于Hadoop的企业级应用的架构和方案,并为实现现实的解决方案提供深入的.代码级的讲解.本书还会带你领略数据设计以及数据设计如何影响实现.本书解释了MapReduce的工作原理,并展示了如何在MapReduce中重新定制特定的业务问题.在整本书中

《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接

对于Hadoop的MapReduce编程makefile

根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架.在需求make当自己主动MapReduce编译和打包的应用. 在这里,一个简单的WordCount1一个例子详细的实施细则,注意:hadoop版本号2.4.0. 源码包括两个文件.一个是WordCount1.java是详细的对单词计数实现的逻辑.第二个是CounterThread.java.当中简单的当前处理的行数做一个统计和打印.代码分别见附1. 编写makefile的关键是将hadoop提供的jar包的路径

《Hadoop高级编程——构建与实现大数据解决方案》有奖试读

一. 活动主题: <Hadoop高级编程--构建与实现大数据解决方案>有奖试读,点击查看图书详情 二. 活动时间: 2014年8月6日至2014年9月5日(为期1个月) 三. 参与方式 : 您可以选择下面任何一种方式来参加我们的活动! 1. 阅读我们精选的<Hadoop高级编程>试读章节(点击下载PDF文档),并将书评发布在本篇博客的评论区,每位用户可发表多一条或多条书评,书评优秀可重复获奖. 2. 将活动转发至新浪微博并关注@清华大学出版社第五事业部,或者关注官方微信@清华书友(

Hadoop新MapReduce框架Yarn详解

简介 本文介绍了Hadoop自0.23.0版本后新的MapReduce框架(Yarn)原理,优势,运行机制和配置方法等,着重介绍新的yarn框架相对于原框架的差异及改进,并通过Demo示例详细介绍了在新的Yarn框架下搭建和开发Hadoop程序的方法.读者通过本文中新旧Hadoop MapReduce框架的对比,更深刻理解新的yarn框架技术与那里和设计思想,文中的Demo代码经过微小修改既可用于用户基于Hadoop新框架的实际生产环境. Hadoop MapReduceV2(Yarn)框架简介

Hadoop 新 MapReduce 框架 Yarn 详解

原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 Hadoop 框架(0.20.0 及之前版本)的同仁应该很熟悉如下的原 MapReduce 框架图: 图 1.Hadoop 原 MapReduce 架构 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 首先用户程序 (JobCli

JavaScript高级编程

原文地址: http://www.onlamp.com/pub/a/onlamp/2007/07/05/writing-advanced-javascript.html Web应用程序(Web Applications)        从计算机纪元的黎明刚刚来临開始,不同平台间软件的互用性就一直是关注的焦点.为了尽可能实现用户的最大要求,软件公布者往往将流行软件从一个机器移植到另外一个机器上,这通常要花费数月的辛苦劳动,有时甚至是整个软件在新的硬件或者操作系统上的全然重写.随着计算机功能的不断强

用PHP编写Hadoop的MapReduce程序

用PHP写hadoop的mapreduce程序 Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java 但hadoop里面有个contrib叫做hadoop streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper 或者 reducer 例如:hadoop jar hadoop-streaming.jar -input SOME_IN