Java大数据开发(三)Hadoop(14)-MapReduce1

2021年11月21日 阅读数:8
这篇文章主要向大家介绍Java大数据开发(三)Hadoop(14)-MapReduce1,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
导读:hadoop解决的是海量数据存储和海量数据计算的问题,存储的问题咱们已经学习过了,那就是HDFS,接下来就要开始计算框架MapReduce的学习了。


MapReduce概念


Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;java


Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。编程


MapReduce优势微信


一、MapReduce易于编程
并发


简单的实现一些接口就能够完成一个分布式程序,这个分布式程序能够分布到大量廉价的PC机器上运行,也就是说,你写一个分布式程序,跟写一个简单的串行程序是如出一辙的,就是由于这个特色使得MapReduce编程变得很是流行。
app


二、良好的扩展性框架


当计算机资源不能获得知足的时候,能够经过简单的增长机器来扩展它的计算能力。多项研究发现,基于MapReduce的计算性能够随节点数目增加保持近似于线性的增加,这个特色是MapReduce处理海量数据的关键,经过将计算节点增至几百或者几千能够很容易地处理数百TB甚至PB级别的离线数据。分布式


三、高容错性oop


MapReduce设计的初衷就是使程序能部署在廉价的PC机器上,这就要求它具备很高的容错性。好比,其中一台机器宕机了,它能够把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,并且这个过程不须要人工参与,彻底是由Hadoop内部完成的。性能


MapReduce的缺点
学习


一、实时计算:MapReduce没法像Oracle或MySQL那样在毫米或秒级内返回结果,若是须要大数据量的毫秒级响应,能够考虑使用HBase。


二、流计算:流计算的输入数据是动态的,而MapReduce的输入数据是静态的,不能动态变化,这是由于MapReduce自身的设计特色决定了数据源必须是静态的。


三、DGA(有向图)计算:多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种状况下,MapReduce并非不能作,而是使用后,每一个MapReduce做业的输出结果都会写入磁盘,会形成大量的词频IO,致使性能很是低下,此时能够考虑用Spark等迭代计算框架。


MapReduce单词统计案例流程



一、分布式的运算程序每每须要分红至少2个阶段。


二、第一个阶段的MapTask并发实例,彻底并行运行,互不相干。


三、第二个阶段的ReduceTask并发实例互不相干,可是他们的数据依赖于上一个阶段的全部MapTask并发实例的输出。


四、MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,若是用户的业务逻辑很是复杂,那就只能多个MapReduce程序,串行运行。


MapReduce进程


一个完整的mapreduce程序在分布式运行时有三类实例进程:


1)MrAppMaster:负责整个程序的过程调度及状态协调


2)MapTask:负责map阶段的整个数据处理流程


3)ReduceTask:负责reduce阶段的整个数据处理流程


关注「跟我一块儿学大数据」

跟我一块儿学大数据

本文分享自微信公众号 - 跟我一块儿学大数据(java_big_data)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。