MapReduce的典型编程场景2


   介绍:一个稍复杂点的处理逻辑往往需要多个 MapReduce 程序串联处理,多 job 的串联可以借助MapReduce 框架的 JobControl 实现。
需求
以下有两个 MapReduce 任务,分别是 Flow 的 SumMR 和 SortMR,其中有依赖关系:SumMR的输出是 SortMR 的输入,所以 SortMR 的启动得在 SumMR 完成之后
这两个程序在:https://blog.51cto.com/14048416/2342024
如何实现两个代码的依赖关系呢?
代码实现(这里只给出多 Job 串联的代码)需求:求每个班级的总分最高的前三名
字段:班级 姓名 数学 语文 英语 (字段之间是制表符分割)
分析
  – 利用“班级和总分”作为 key,可以将 map 阶段读取到的所有学生成绩数据按照班级和成绩排倒序,发送到 reduce
  – 在 reduce 端利用 GroupingComparator 将班级相同的 kv 聚合成组,然后取前三个即是前三名
代码实现
自定义学生类自定义分组MR程序
//Mapperjob:    介绍:计数器是用来记录 job 的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况,MapReduce 自带了许多默认 Counter,现在我们来分析这些默认 Counter 的含义,方便大家观察 Job 结果,如输入的字节数、输出的字节数、Map 端输入/输出的字节数和条数、Reduce 端的输入/输出的字节数和条数等。需求:利用全局计数器来统计一个目录下所有文件出现的单词总数和总行数
代码实现:    介绍:在各种实际业务场景中,按照某个关键字对两份数据进行连接是非常常见的。如果两份数据都比较小,那么可以直接在内存中完成连接。如果是大数据量的呢?显然,在内存中进行连接会发生 OOM。MapReduce 可以用来解决大数据量的连接。在 香港云主机MapReduce join分两种,map joinreduce join     介绍:MapJoin 适用于有一份数据较小的连接情况。做法是直接把该小份数据直接全部加载到内存当中,按链接关键字建立索引。然后大份数据就作为 MapTask 的输入,对 map()方法的每次输入都去内存当中直接去匹配连接。然后把连接结果按 key 输出.。数据介绍
movies.dat:1::Toy Story (1995)::Animation|Children’s|Comedy
字段含义:movieid, moviename, movietype
Ratings.dat:1::1193::5::978300760
字段含义:userid, movieid, rate, timestamp代码实现:    介绍
    – map 阶段,两份数据 data1 和 data2 会被 map 分别读入,解析成以链接字段为 key 以查询字段为 value 的 key-value 对,并标明数据来源是 data1 还是 data2。
    – reduce 阶段,reducetask 会接收来自 data1 和 data2 的相同 key 的数据,在 reduce 端进行乘积链接,最直接的影响是很消耗内存,导致 OOM数据介绍
movies.dat:1::Toy Story (1995)::Animation|Children’s|Comedy
字段含义:movieid, moviename, movietype
Ratings.dat:1::1193::5::978300760
字段含义:userid, movieid, rate, timestamp代码实现

相关推荐: js不同类型的工厂函数怎么定义

这篇文章主要介绍了js不同类型的工厂函数怎么定义的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇js不同类型的工厂函数怎么定义文章都会有所收获,下面我们一起来看看吧。1、带参数的工厂函数和所有函数一样,可以通过参数来定义我们的工厂函…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/23 17:37
下一篇 07/23 17:38

相关推荐