美文网首页Java 杂谈
高性能集合流式操作,MapReduce初体验

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

作者: Java耕耘者 | 来源:发表于2018-10-19 14:56 被阅读0次

高性能集合流式操作,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这点事

相关文章

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

    高性能集合流式操作,MapReduce初体验 1、MapReduce简介 源自于google的MapReduce论...

  • jdk8的Stream学习之创建流

    JDK8的流式编程来来回回走马观花也看了几遍了。工作中一般的集合类操作能用流式操作的也都用流式操作。今天正儿八经的...

  • Java8流操作,转载

    原文地址: 深蓝至尊 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得...

  • 【Java8新特性】Streams(流)

    Java 8 引入了Stream(流式操作),你可以通过该操作实现对集合的并行处理和函数式操作。Collectio...

  • Java 集合的流式操作

    Java 8 引入,位于java.util.stream包中,与 java.io 包里的输入输出流 InputSt...

  • JavaStream 常用操作(二)

    一. 流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要...

  • java8 Stream常用功能

    Java 8 引入了流式操作(Stream),通过该操作可以实现对集合(Collection)的并行处理和函数式操...

  • Java8-Stream流式计算

    什么是Stream流式计算 大数据:存储 + 计算 集合、MySQL 本质就是存储东西的; 计算都应该交给流来操作...

  • 使用 Arrays.asList 把数据转换为 List 的三个

    Java 8 中 Stream 流式处理的各种功能,大大减少了集合类各种操作(投影、过滤、转换)的代码量。所以,在...

  • Java8 新特性之流式数据处理

    摘要: java8的流式处理极大了简化我们对于集合、数组等结构的操作,让我们可以以函数式的思想去操作,本篇文章将探...

网友评论

    本文标题:高性能集合流式操作,MapReduce初体验

    本文链接:https://www.haomeiwen.com/subject/esvyzftx.html