MapReduce的主要应用场景
可以转化为MR任务的条件:
- 问题必须可以拆分
- 子问题必须独立
- 数据结构能够满足key-value的这样的模式
常见场景:
- 计数与求和,如:日志查询、统计分析
- 整理归类,如:构建倒排索引,ETL(Extract-Transform-Load 用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。)、数据查询校验
- 分布式任务执行,如:性能测试
- 排序,排重,如:数据分析,ETL
- 关系运算,如:连接、投影
- 图处理,如:网页索引,图分析
MapReduce的不适用的场景
- 任务之间有结果依赖,如 斐波那契数列 Fn=F(n-1)+F(n-2)
- 处理需要及时相应的任务,高并发请求的任务
MapReduce开发基本思路和流程
思路
- 任务是否可以拆分?
- 子任务是否独立?
- 树立业务需求,将数据需求转化为(K,V)模式
- 选择设计K和V
- 设计K和V的经过map和reduce的变换过程,一次迭代不够则需要多次
流程
- 继承Mapper类,实现map函数
- 继承Reducer类,实现reduce函数
- 设置Job相关信息
- 提交Job运行
MapReduce Java API