1、运行流程
由上图可以看到MapReduce 执行下来主要包含这样几个步骤:
- 首先对输入数据源进行切片
2)master 调度 worker 执行 map 任务
3)worker 读取输入源片段
4)worker 执行 map 任务,将任务输出保存在本地
5)master 调度 worker 执行 reduce 任务,reduce worker 读取 map 任务的输出文件
6)执行 reduce 任务,将任务输出保存到 HDFS
2、运行流程详解
以 WordCount 为例
给定任意的 HDFS 的输入目录,其内部数据为“f a c d e……”等用空格字符分隔的字符串, 通过使用 MapReduce 计算框架来统计以空格分隔的每个单词出现的频率,输出结果如
<a,10>,<b,20>,<c,2>形式的结果到 HDFS 目录中。
WordCount 运行图解
MapReduce 将作业的整个运行过程分为两个阶段:Map 阶段 Reduce 阶段。Map 阶段由一定数量的 Map Task 组成,例如:
输入数据格式解析:InputFormat
输入数据处理:Mapper
数据分组:Partitioner
数据按照 key 排序
本地规约:Combiner(相当于 local reducer,可选)
将任务输出保存在本地
Reduce 阶段由一定数量的 Reduce Task 组成,例如:
数据远程拷贝
数据按照 key 排序
数据处理:Reducer
数据输出格式:OutputFormat
通常我们把从 Mapper 输出数据到 Reduce 读取数据之间的过程称之为 shuffle。
3、MapReduce 开发流程
搭建开发环境,参考 HDFS 环境搭建,基本一致
基于 MapReduce 框架编写代码
编译打包,将源代码和依赖 jar 包打成一个包
上传至运行环境
运行 hadoop jar 命令,现已由 yarn jar 替代,建议使用新命令提交执行具体提交命令为:
yarn jar testhdfs-jar-with-dependencies.jar com.driver.WordCount /tmp/input /tmp/output3
通过 yarn web ui 查看执行过程
查看执行结果