MapReduce编程框架
简介
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架,它的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
MapReduce的优缺点
优点 | 描述 |
易编程 | MapReduce通过简单的接口实现,可以完成一个分布式程序,就像写一个简单的串行程序一样。 |
良好的扩展性 | 当计算资源不足时,可以通过增加机器来扩展其计算能力。 |
高容错性 | MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,具有很高的容错性,如果其中一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,这个过程不需要人工参与。 |
适合PB级以上海量数据的离线处理 | 可以实现上千台服务器集群并发工作,提供强大的数据处理能力。 |
缺点 | 描述 |
不擅长实时计算 | MapReduce无法像MySQL一样,在毫秒或者秒级内返回结果。 |
不擅长流式计算 | 流式计算的输入数据是动态的,而MapReduce的输入数据集是静态的,不能动态变化。 |
不擅长DAG(有向图)计算 | 多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出,在这种情况下,使用MapReduce会导致大量的磁盘IO,性能非常低下。 |
MapReduce的核心思想
MapReduce编程模型包含两个主要阶段:Map阶段和Reduce阶段。
Map阶段:接受输入数据,并将其分解成一系列的键值对(keyvalue pairs),每个Mapper独立处理输入数据的一部分,并输出中间结果。
Reduce阶段:处理由Map阶段产生的键值对,进行某种形式的聚合操作,最终生成输出结果,每个Reducer独立处理一部分中间结果,并将最终结果合并输出。
MapReduce的节点主从结构
一个完整的MapReduce程序在分布式运行时有三类实例进程:
1、MrAppMaster:负责整个程序的过程调度及状态协调。
2、MapTask:负责Map阶段的整个数据处理流程。
3、ReduceTask:负责Reduce阶段的整个数据处理流程。
MapReduce的运行流程
1、简单介绍:传入一个文本段,按行拆分,Mapping阶段拆分每一个单词,形式为<key, value>;key是单词,value是单词的个数,Shuffing阶段将key相同的键值对汇总到一起,Reducer阶段合并Shuffing阶段处理后,key相同的键值对(value做一个累加操作),最后输出结果。
2、详细流程:待处理文本客户端submit()之前,获取待处理数据的信息,然后根据参数配置,形成一个任务分配的规划,提交切片信息(到Yarn RM),切片信息、jar包(在不同机器时才需要提交)、xml文件计算出MapTask的数量,在map阶段读取数据前,FileInputFormat会将输入文件分割成split,split的个数决定了map的个数,影响map个数(split个数)的主要因素有文件的大小、文件的个数和splitsize的大小。
Shuffle机制
MapReduce确保每个reducer的输入都是按key排序的,系统执行排序的过程(即将mapper输出作为输入传给reducer)称为shuffle。
Partition分区
分区:把数据扎堆存放,每个reducetask可以读取一个分区,产生一个结果文件,多个分区可以由多个reducetask来分别读取,并分别产生多个结果文件。
序列化
序列化是指把内存中的对象转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输,反序列化则是将收到的字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。
常见问题解答
MapReduce适合处理什么样的数据?
答:MapReduce适合处理PB级以上的海量数据,特别是那些可以并行处理的离线数据,由于其设计特点,MapReduce不太适合实时计算和流式计算。
MapReduce如何实现高容错性?
答:MapReduce通过任务重试和数据备份等机制来实现高容错性,当一个节点发生故障时,Hadoop会自动将该节点上的任务迁移到其他节点继续执行,整个过程无需人工干预。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1115905.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复