Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;
Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上;
为什么需要MAPREDUCE?
(1)海量数据在单机上处理因为硬件资源限制,无法胜任。
(2)而一旦将单机版程序扩展到集群来分布式运行,将极大增加程序的复杂度和开发难度。
(3)引入mapreduce框架后,开发人员可以将绝大部分工作集中在业务逻辑的开发上,而将分布式计算中的复杂性交由框架来处理。
设想一个海量数据场景下的wordcount需求:
单机版:
- 内存受限,磁盘受限,运算能力受限
分布式:
- 文件分布式存储(HDFS)
- 运算逻辑需要至少分成2个阶段(一个阶段独立并发,一个阶段汇聚)
- 运算程序如何分发
- 程序如何分配运算任务(切片)
- 两阶段的程序如何启动?如何协调?
- 整个程序运行过程中的监控?容错?重试?
可见在程序由单机版扩成分布式时,会引入大量的复杂工作。为了提高开发效率,可以将分布式程序中的公共功能封装成框架,让开发人员可以将精力集中于业务逻辑。
而mapreduce就是这样一个分布式程序的通用框架,其应对以上问题的整体结构如下:
MRAppMaster(mapreduce application master) MapTask ReduceTask