从MapTask运行机制中理解MapReduce序列化
1.什么是MapReduce序列化?
序列化就是把内存中的对象,转换成 字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。
2.MapTask是怎样运行的?
流程图
详细步骤:
1.通过FileInputFormat组件读取HDFS文件系统中的文件并合并
2.调用FileInputFormat中的getSplits方法对目标文件进行切片,得到切片集合,有几个切片就启动几个MapTask
3.切分完成后,由Record Reader读取数据,返回<key,value>,key代表行首字符偏移量,value表示该行的数据
4.Record Reader每读取一行数据,返回的<key,value>进入MapTask类中,执行用户重写的map函数(每返回一个<key,value>重写map调用一次,并输出一个<key,value>)
5.MapTask每输出一个数据就会写入到环形缓冲区内存中,因缓冲区有大小限制,默认为100MB,当缓冲区占用达到80M时,启动溢写线程,往磁盘上生成一个临时文件,如果map结果很大,就会有多个溢写发生,磁盘上相应生成多个临时文件,当临时文件超过一定数量就会合并成一个文件永久存储在磁盘中
3.MapTask执行过程中理解MapReduce序列化
当数据由缓冲区内存写到临时文件中,就是MapReuce序列化的一种形式
即:内存中的对象,转换成字节序列,存储到磁盘中