注:本文注重原理介绍,较少涉及编程实现,有错误请指正,感谢~
在进入正文之前需要了解这几个概念:
HDFS:可以先简单理解为它是一个大型分布式的文件系统,里面存放了大量文件,也可以理解为放着俗称的大数据。
数据块:HDFS中的数据以数据块为单位存放,默认是64MB,HDFS中的文件可能远远大于64MB,它被分割成很多个数据块,存放在集群上,数据块不一定存放在一台机器上,也不一定是连续存放的。
Map 阶段
首先大致了解一下Map的操作流程。
HDFS中待处理的数据首先进行切分(input split)得到很多个数据分片,对应很多个Map任务。每个数据分片都是由键值对组成的,其中键是一个长整数偏移量,是某一行起始位置相对于文件起始位置的偏移量(这里的键值并不是很重要,没必要过分关注),值就是对应的一行文本数据。数据分片中的一对(键-值)数据送给一个map方法来处理,处理之后的结果仍是键值对的形式,这里的键值对由你重写的map函数来指定(这里的键就很重要了)。
执行到这里,相当于之前的数据分片中的每条数据都经过处理,得到了新的键值对数据。不同的数据分片中可能会包含相同的key值,因此需要对这些数据片进行合并排序,将相同key值对应的数据整合到一起。姑且将整合以后得到的很多数据称为数据段(不是官方说法,只是为了方便解释并与前面的定义做区分)。
关于数据段有四条:
- 相同key值的数据一定在同