mapreduce程序开发的一些总结

mapreduce在编程的时候,基本上一个固化的模式,没有太多可灵活改变的地方,除了以下几处:

 

1、输入数据接口:InputFormat ---> FileInputFormat(文件类型数据读取的通用抽象类) DBInputFormat (数据库数据读取的通用抽象类)

默认使用的实现类是: TextInputFormat job.setInputFormatClass(TextInputFormat.class)

TextInputFormat的功能逻辑是:一次读一行文本,然后将该行的起始偏移量作为key,行内容作为value返回

2、逻辑处理接口: Mapper

完全需要用户自己去实现其中 map() setup() clean()

3、map输出的结果在shuffle阶段会被partition以及sort,此处有两个接口可自定义:

Partitioner

有默认实现 HashPartitioner,逻辑是 根据key和numReduces来返回一个分区号; key.hashCode()&Integer.MAXVALUE % numReduces

通常情况下,用默认的这个HashPartitioner就可以,如果业务上有特别的需求,可以自定义

Comparable

当我们用自定义的对象作为key来输出时,就必须要实现WritableComparable接口,override其中的compareTo()方法

 

4、reduce端的数据分组比较接口 : Groupingcomparator

reduceTask拿到输入数据(一个partition的所有数据)后,首先需要对数据进行分组,其分组的默认原则是key相同,然后对每一组kv数据调用一次reduce()方法,并且将这一组kv中的第一个kv的key作为参数传给reduce的key,将这一组数据的value的迭代器传给reduce()的values参数

利用上述这个机制,我们可以实现一个高效的分组取最大值的逻辑:

自定义一个bean对象用来封装我们的数据,然后改写其compareTo方法产生倒序排序的效果

然后自定义一个Groupingcomparator,将bean对象的分组逻辑改成按照我们的业务分组id来分组(比如订单号)

这样,我们要取的最大值就是reduce()方法中传进来key

 

5、逻辑处理接口:Reducer

完全需要用户自己去实现其中 reduce() setup() clean()

 

6、输出数据接口: OutputFormat ---> 有一系列子类 FileOutputformat DBoutputFormat .....

默认实现类是TextOutputFormat,功能逻辑是: 将每一个KV对向目标文本文件中输出为一行

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习数据驱动_利用深度学习实现手绘数据可视化的生成

前一段时间,我开发了Sketchify, 该工具可以把任何以SVG为渲染技术的可视化转化为手绘风格。(参考手绘风格的数据可视化实现 Sketchify)那么问题来了,很多的chart是以Canvas为渲染技术的,那要怎么办&#xf…

远程计算机无法操作,win7系统的QQ远程协助无法控制计算机的问题的解决方法

在使用win7系统的计算机工作和学习过程中,可能会发生win7系统的QQ远程协助无法控制计算机的情况. 如何处理win7系统的QQ远程控制无法控制计算机的问题?对于计算机级别的用户,如果win7系统qq远程协助无法控制计算机,通常不知道该怎…

java应用中的日志介绍

日志在应用程序中是非常非常重要的,好的日志信息能有助于我们在程序出现 BUG 时能快速进行定位,并能找出其中的原因。 但是,很多介绍 AOP 的地方都采用日志来作为介绍,实际上日志要采用切面的话是极其不科学的!对于日志…

微软全新Chromium版Edge浏览器下载

下载地址: https://www.microsoft.com/en-us/edge

企业网站 源码 服务邮箱:_后来才知道:温州腾讯企业邮箱定制服务

后来才知道:温州腾讯企业邮箱定制服务 qnmsptdb后来才知道:温州腾讯企业邮箱定制服务 软文推广得到大家的转发之后,那么软文的经济价值也会随之而来。内容更新质量言外之意,如果你长期更新低质量内容,是不可取的&#…

圣三一学院计算机专业,360教育集团:爱尔兰都柏林大学圣三一学院计算机专业...

应用,新产品设计。网络和分布系统的安全和管理课程介绍计算机基层和网络安全,研究网络管理的方法和高端信息服务的管理。这六个部分内容的学习包括每周大概20小时的沟通时间,包括讲座、辅导、研讨会、试验等。绝大部分课程要求学生完成其他课…

JavaScript的检测及其数据类型

一、JavaScript有几种类型的值?Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增,表示独一无二的值),而引用数据类型统称为Object对…

我是Leader,我被降职成了普通员工,HR说:公司要梯队年轻化

“BAT也不是完美的避风港哇~”这是老刘说的,老刘是BAT某家的一个Leader,职级约类似T7(T族一般是技术族,管理是M族),在BAT某家呆了11年,但是在整个互联网行业推崇,梯队年轻化的氛围时,老刘所在的…

in最多可以放多少?_汽车最多可以停放多少天不开?维修师傅:尽可能别超过这个时间...

在当下,买车似乎已经成为了一种消费潮流,其中不乏一些本身用车需求不明显但也随大流买车的人,结果车买回来之后最初的新鲜劲一过就放在那里不怎么用了。当然也有部分车主是因为自己的工作修需要经常需要在外出差,那么就算想天天开…

计算机电源风扇安装方法,机箱风扇怎么装 电脑机箱风扇电源线接法

夏天天气炎热,电脑机箱内温度也较高,温度过高会影响电脑性能出现死机等问题,甚至影响硬件寿命。所以给机箱装风扇来散热是非常重要的。那么,机箱风扇怎么装合理呢?机箱风扇的电源线怎么接呢?下面分享一下机箱风...夏天天气炎热&…

使用微服务失败的12个原因

在过去的几年中,我已经对处于数字化转型过程中的多个产品团队进行了架构审查。大多数团队都在按照微服务架构构建产品。他们有使用基于微服务的体系结构的所有正确意图-更快的开发,更好的可伸缩性,更小的独立团队,独立的部署&…

市场压力只有老板扛?柏明顿阿米巴如何传递经营压力

内部交易是阿米巴经营模式中的一个重要环节,通过内部交易,使企业内部上下道工序之间以价格为纽带,以服务和产品进行等价交换,统一结算交易。通过内部交易行为,可以掌握各个阿米巴单元的盈亏状态。阿米巴构建内部市场&a…

flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...

蘑菇租房的联合创始人龙东平前几个月曾说:“视频号是一次掀翻桌子重新排座次的机会,是巨浪滔天,是新世界,新秩序。”视频号发展趋势愈加迅猛,越来越多的玩家涌入,正在获得新一波社交流量。为什么更加受欢迎…

网络中服务器是指为网络提供资源,并对这些资源进行管理的计算机,2016年职称计算机考试Internet冲刺试题及答案3...

1、Internet的通信协议是( A )A、TCP/IP B、OSI/ISOC、NetBEUI D、NWLink2、把计算机网络分为有线和无线网的主要分类依据是(C)A、网络成本 B、网络的物理位置C、网络的传输介质 D、网络的拓扑结构3、要将两台计算机直接相连,那么使用双绞线的类型为(A)A、交叉线 B、…

Visio 图形大小如何随文字多少自动调整?

Visio 图形大小默认是根据图形内文字多少自动调整。 如果手动调整过图形,那么该图形就不再随文字多少自动调整了。 解决办法: 删除该图形,重新拉取一个,重新编写文本

java同一个包中,类之间的的调用

如果是静态方法,直接 类名.方法名即可,如果是非静态方法,则需new一个对象出来,然后用对象.方法名调用如:public class A{public static void T(){System.out.print("这是A类的方法");}public void T2(){Syst…

mos管开关电路_【电路】MOS管开关电路图详解(一)

MOS管的开关特性静态特性MOS管作为开关元件,同样是工作在截止或导通两种状态。由于MOS管是电压控制元件,所以主要由栅源电压uGS决定其工作状态。工作特性如下:※uGS※ uGS>开启电压UT:MOS管工作在导通区,漏源电流iDSUDD/(RDrDS…

Visio图形自动编号

操作步骤: 1.进入“视图”--“加载项” 2.“加载项”---“运行加载项” 3.“运行加载项”---“给形状编号”

伪代码就是计算机语言 正确吗,伪代码实例绍.ppt

伪代码实例绍第2章 伪代码实例介绍 主讲:黄明琼 第2章 伪代码实例介绍 2.1 伪代码介绍 2.2 三角形问题 2.3 NextDate函数问题 2.4 佣金问题 2.5 简单ATM系统 2.6 货币转换器 本章教学目标 正确理解伪代码的概念 正确理解伪代码的规则 正确理解伪代码实例中的逻辑 能…

Java面试170题答案解析(1-20题)

为什么80%的码农都做不了架构师?>>> 转载于:https://my.oschina.net/lanyu96/blog/2250020