MapReduce总结 (1)
2016-04-07 21:53
141 查看
【1】Hadoop Map/Reduce框架为每一个InputSplit产生一个map任务,而每个InputSplit是由该作业的InputFormat产生的。
【2】Mapper的输出被排序后,就被划分给每个Reducer。分块的总数目和一个作业的reduce任务的数目是一样的。用户可以通过实现自定义的 Partitioner来控制哪个key被分配给哪个 Reducer。
【3】写MR时主要有8个步骤:
1、map任务处理
(1.1)读取输入文件的内容,解析成key, value对。对输入文件的每一行,解析成key\value对。每个键值对调用一次map函数。
(1.2)写自己的逻辑,对输入的key\value处理,转换成新的key\value输出。
(1.3)对输出的key\value进行分区。
(1.4)对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
(1.5)(可选)分组后的数据进行归约。
2、reduce任务处理
(2.1)对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
(2.2)对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key\values处理,转换成新的key\value输出。
(2.3)把reduce的输出保存到文件中。
【4】技巧:先确认<k1,v1>和<k3,v3>,这个根据业务要求,一般都比较好确定。k2一般和k3相似。还有一种确定k2的方式是:考虑mapper中有一个特别重要的功能是分组。考虑业务中哪些需要分组,可以确定k2。确定<k1, v1>和<k2, v2>就可以确定map(),<k2,v2s>和<k3, v3>就确定了reduce()。
【5】涉及到比较的问题,先找到它们关联的因素。将关联因素作为k2,在一个map函数中context.write可以调用多次。如果v2的类型有多个,可以在v2字段设置标记,用来区分。得灵活运用。
【2】Mapper的输出被排序后,就被划分给每个Reducer。分块的总数目和一个作业的reduce任务的数目是一样的。用户可以通过实现自定义的 Partitioner来控制哪个key被分配给哪个 Reducer。
【3】写MR时主要有8个步骤:
1、map任务处理
(1.1)读取输入文件的内容,解析成key, value对。对输入文件的每一行,解析成key\value对。每个键值对调用一次map函数。
(1.2)写自己的逻辑,对输入的key\value处理,转换成新的key\value输出。
(1.3)对输出的key\value进行分区。
(1.4)对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
(1.5)(可选)分组后的数据进行归约。
2、reduce任务处理
(2.1)对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
(2.2)对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key\values处理,转换成新的key\value输出。
(2.3)把reduce的输出保存到文件中。
【4】技巧:先确认<k1,v1>和<k3,v3>,这个根据业务要求,一般都比较好确定。k2一般和k3相似。还有一种确定k2的方式是:考虑mapper中有一个特别重要的功能是分组。考虑业务中哪些需要分组,可以确定k2。确定<k1, v1>和<k2, v2>就可以确定map(),<k2,v2s>和<k3, v3>就确定了reduce()。
【5】涉及到比较的问题,先找到它们关联的因素。将关联因素作为k2,在一个map函数中context.write可以调用多次。如果v2的类型有多个,可以在v2字段设置标记,用来区分。得灵活运用。
相关文章推荐
- 35 个 Java 代码性能优化总结
- git常用命令
- php设计模式之适配器模式
- 【CodeForces】[658A]Bear and Reverse Radewoosh
- 如何坚持每周写一篇博客
- [Unity热更新]tolua# & LuaFramework(五):.proto转换为.lua
- python subprocess
- sed 基本使用
- 也许图像学习从此刻开始
- LIS最长上升子序列O(n^2)&O(nlogn)
- 好的架构不是设计出来的,而是演进出来的
- 刚学的网页换肤
- 解决PowerDesigner中DBMS有关的设置问题
- JDK各个版本的新特性jdk1.5-jdk8
- 【iOS开发】UIWebView与JavaScript(JS) 回调交互
- 代码优化:将重复代码封装成函数(3)
- JAVA_异常处理
- python的Theano库
- 划分树基础知识
- example_Jquery Ajax + php 三级联动