首页 > 技术文章 > mapreduce笔记

lijieqiong 2017-03-31 17:41 原文

mapreduce是什么

mapreduce是一个计算框架,所以有输入和输出。输入输出都是key/value形式的。map的key和value一对一,reduce的key是一对多的,所以value是一个迭代器。
是一个软件框架,可以并行处理,可靠且容错性高。能处理海量数据。
思想“分而治之
map:分,复杂的任务分解为简单的任务。
reduce:汇总。对map结果汇总,同一个key对应的value汇总到一起。”

函数实现流程

分别实现map函数和reduce函数,以及main‘函数。
map函数中,定义输入key,value,以及context记录map的计算状态
][2]
reduce函数中,定义输入key和value,以及context]1
!][2]
main函数作用:
首先,初始化配置信息,内容写明mapreduce系统的配置信息。

接下来构建一个作业job,写明job的名称,job装载的map,reduce类,以及输出的key、value类型的类。

最后构建输入的数据文件,和输出的数据文件

最后加一个,job开始运行

    2行
	JobClient.runJob(conf);

mapreduce框架,原理

mapreduce的实体有四个:
1)客户端,程序员编写代码,配置作业,提交作业。
2)JobTracker:初始化作业,分配作业,与TaskTracker通信
3)TaskTracker:保持与job的通信,在分配的数据片段上执行map和reduce任务
4)HDFS:保存作业的数据,配置信息,以及最后输出数据

mapreduce的运行机制
1)输入分片:将输入文件计算分片,每个分片对应一个map任务
2)map阶段:map就是映射的意思。将一组键值对映射成新的键值对。
3)reduce函数:归总函数,同样的key对应的value被归总到一起

mapreduce和hadoop的关系,和hive关系

4)shuffle

处理逻辑大致如下“
1)首先将HDFS中数据用split方式分为数据片,这个个数可以自己定义。
2) 分片的数据交给mapper函数。
3) map函数解析输入的数据变成一个个key,value
4)reduce先做shuffle读取对应的数据,读完后sort排序。跑徐后交给reducer做统计。得到一个key累计出现的次数为value
5)reducer的吹结果,写到HDFS的文件路径下

mapreduce不能解决的问题
1)实时计算:需要实时结果的不能用mr
2) 流式计算:当输入数据是动态的,不能用mr。mr能解决静态数据

有向图的计算。后一个程序输入是前一个程序输出的,不能依赖mr。
分布式系统理解

Hadoop是一个开源系统。包括计算模型map/reduce,分布式文件系统HDFS。hadoop要分布需要两部分:hdfs(分布式文件系统),以及mapreduce(分布式计算框架)))

推荐阅读