《Hadoop技术内幕——深入解析MapReduce架构设计与实现原理》(董西城著)一书中,第8章《Task运行过程分析》中第3小结详细介绍了Map Task的内部实现,过程如图所示:
在Spill阶段,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。其步骤如下:
- 对缓冲区kvbuffer中区间[bufstart, bufend)内的数据进行排序。会先partition,然后基于key排序。
- 按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out中。
- 将分区数据的元信息写道内存索引数据结构SpillRecorder中,每个元信息包含在临时文件中的偏移量、压缩前后的数据大小。
这些临时文件会在Combine阶段进行合并,最终生成一个文件,并保存到output/file.out中,同时生成响应的索引文件oiutput/file.out.index
那么问题来了,这些中间结果是否可以被第三方获取?是否可以进行加密?加密是否可逆?
在该书第11章《Hadoop安全机制》中有相关介绍。在未添加安全机制之前,任何用户可以通过URL来获取人意一个Map Task的中间输出结果。为了解决该问题,Hadoop在Reduce Task与TaskTracker之间的通信机制上添加了双向认证机制,以保证有且仅有同作业的Reduce Task才能够读取Map Task的中间结果。该双向认证是以它们之间的共享的作业令牌为基础。
过程如下:
TaskTracker对Red