Mapreduce
2020年11月1日
8:24
引言
这是一个编程框架,由框架负责并行任务执行,由你负责编写任务单元分解,任务合并业务。
Mapreduce的编写分为三大部分:
- mapper
- 数据按行输入,mapper负责处理行数据,将行数据分解成一个或多个基础单元。行数据由框架对源数据格式化后提供
- reducer
- 大量mapper分解得到的基础单元集,由reducer进行合并,如何合并,合并算法。
- driver
- 负责任务配置
- 主要任务是指定mapper和reducer的输入输出的类型,以及任务数据源的输入输出。
Mapreduce的任务分析,重点需要关注k,v对,mapper的输入,输出,reducer的输入,输出都是以k,v的形式存在,关键应该放在对于任务单元的却确定以及任务分解合并逻辑的分解。
案例:流量统计
任务分析:每一行是一个用户产生的上下行流量数据。任务是利用分布式计算统计所有上下行流量。
对mapper来说:
- 输入k,v分别是,行号,v行内容
- 输出k,v分别是,用户id,FlowBean,FlowBean为自定义实体类,包含上下行流量属性,实现了hadoop序列化
对于reducer来说
- 输入k,v为mapper输出,即用户id和FlowBean
- 输出k,v为分别为行号,合并的统计结果FlowBean,即对每一行所有的任务进行合并,最终输出。
实现:见com.learning.flowsum
其中需要注意的细节是,在编写的过程中尽量注意对象的复用,避免方法因为并行调用产生大量短命的对象。
<<phone_data.txt>>