Hadoop的读写流程主要分为两部分:HDFS的读写流程和MapReduce的读写流程。
- HDFS的读写流程:
- 写入流程:当客户端需要向HDFS写入数据时,首先会将数据划分为块(通常为128MB)并进行复制,然后通过HDFS客户端将数据块传输给NameNode,NameNode会将数据块的元数据信息记录在EditLog日志中,并将数据块的具体位置信息保存在BlockMap中。接着,客户端会将数据块传输给DataNode,DataNode将数据块保存在本地磁盘上,并向NameNode发送确认信息。最后,NameNode更新元数据信息并返回写入结果给客户端。
- 读取流程:当客户端需要从HDFS读取数据时,首先向NameNode发送读取请求,NameNode返回数据块的位置信息给客户端。然后客户端通过HDFS客户端从DataNode读取数据块,并将数据块合并成完整的文件。
- MapReduce的读写流程:
- 写入流程:在MapReduce任务中,输入数据通常从HDFS中读取。MapReduce作业首先从HDFS中读取输入数据,然后将输入数据划分为InputSplit,每个InputSplit对应一个Map任务的输入数据。接着,MapReduce框架会将InputSplit分配给不同的Map任务并将任务发送到集群中的各个节点上执行。
- 读取流程:在MapReduce任务中,输出数据通常会写入HDFS中。每个Map任务会生成中间结果并将其写入本地磁盘上的临时文件中,而Reduce任务则会从各个Map任务的临时文件中读取中间结果并进行合并。最后,Reduce任务将最终结果写入HDFS中。
总的来说,Hadoop的读写流程可以简单概括为:数据写入时先将数据划分、复制并保存元数据信息,然后将数据块保存在DataNode上;数据读取时先获取数据块的位置信息,然后从DataNode读取数据块并进行合并处理。