整个Map阶段流程大体如上图所示。
简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给 map(用户自己实现的)进行处理,数据被map处理结束之后交给OutputCollector收集 器,对其结果key进行分区(默认使用hash分区),然后写入buffer,每个map task都有 一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一 个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所 有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据
详细步骤
<key,value>
. Key 表示每行首字符 偏移值, Value 表示这一行文本内容配置
配置 | 默认值 | 解释 |
---|---|---|
mapreduce.task.io.sort.mb | 100 | 设置环型缓冲区的内存值大小 |
mapreduce.map.sort.spill.percent | 0.8 | 设置溢写的比例 |
mapreduce.cluster.local.dir | ${hadoop.tmp.dir}/mapred/local | 溢写数据目录 |
mapreduce.task.io.sort.factor | 10 | 设置一次合并多少个溢写文件 |