高性能集合流式操作,MapReduce初体验

高性能集合流式操作,MapReduce初体验

 1、MapReduce简介

源自于google的MapReduce论文,发表于2004年12月,HadoopMapReduce是google MapReduce 克隆版。MapReduce是一种计算模型,用以进行大数据量的计算。其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。



回想自己最初学 Hadoop 的时候,初衷是写MapReduce程序,但是搭建单机环境折腾一周,搭建分布式环境折腾一周,跑个Demo解决一下Bug又一周过去了。最后都忘了自己是想学 MapReduce 的。

感觉自己虽然是搞Hadoop的,但是写MR比自己想的要少很多。初期是花了很多精力在安装以及集群的各种日常维护,熟悉Hive后就经常用Hive来解决问题,然后逐渐地各种任务过度到了Spark上,因此对MapReduce的重视就少了很多。 细想起来,MapReduce本身是很简洁易学的,因此这次抛开各种MapReduce背后的实现原理,来专门回顾一下它的编程模型。

MapReduce计算提供了简洁的编程接口,对于某个计算任务来说,其输入是Key/Value数据对,输出也以Key/Value数据对方式表示。

对于应用开发者来说,只需要根据业务逻辑实现Map和Reduce两个接口函数内的具体操作内容,即可完成大规模数据的并行批处理任务。

Map 函数以Key/Value数据对作为输入,将输入数据经过业务逻辑计算产生若干仍旧以Key/Value形式表达的中间数据。MapReduce计算框架会自动将中间结果中具有相同Key值的记录聚合在一起,并将数据传送给Reduce函数内定义好的处理逻辑作为其输入值。

Reduce 函数接收到Map阶段传过来的某个Key值及其对应的若干Value值等中间数据,函数逻辑对这个Key对应的Value内容进行处理,一般是对其进行累加、过滤、转换等操作,生成Key/Value形式的结果,这就是最终的业务计算结果。

MapReduce的输入输出

MapReduce框架运转在<key,value>键值对上。也就是说作业的输入输出都是<keey,value>键值对,中间的各种处理也都是对键值对进行处理。

MapReduce 的两大优势是:

1 ) 并行处理:

在MapReduce中,我们将作业划分为多个节点,每个节点同时处理作业的一部分。因此,MapReduce基于Divide and Conquer范例,它帮助我们使用不同的机器处理数据。由于数据由多台机器而不是单台机器并行处理,因此处理数据所需的时间会减少很多。

2 ) 数据位置:

我们将计算移动到MapReduce框架中的数据,而不是将数据移动到计算部分。数据分布在多个节点中,其中每个节点处理驻留在其上的数据部分。

这使得具有以下优势:

将处理单元移动到数据所在位置可以降低网络成本;

由于所有节点并行处理其部分数据,因此处理时间缩短;

每个节点都会获取要处理的数据的一部分,因此节点不会出现负担过重的可能性。

但是,MapReduce 也有其限制:

不能进行流式计算和实时计算,只能计算离线数据;

中间结果存储在磁盘上,加大了磁盘的 I/O 负载,且读取速度比较慢;

开发麻烦,例如wordcount功能就需要很多的设置和代码量,而Spark将会非常简单。

如何一起学习,有没有免费资料?

在程序员这条路上遇到瓶颈的朋友可以加入群:171985536大家一起来提升进步 但要备注好信息 ,分享知识

关注下面公众号,获取BATJ等一线互联网企业面试题目和答案还有java技术干货知识等你领取 Java这点事


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值