Hadoop的讀寫流程主要分為兩部分:HDFS的讀寫流程和MapReduce的讀寫流程。
1. HDFS的讀寫流程:
- 寫入流程:當客戶端需要向HDFS寫入數據時,首先會將數據劃分為塊(通常為128MB)并進行復制,然后通過HDFS客戶端將數據塊傳輸給NameNode,NameNode會將數據塊的元數據信息記錄在EditLog日志中,并將數據塊的具體位置信息保存在BlockMap中。接著,客戶端會將數據塊傳輸給DataNode,DataNode將數據塊保存在本地磁盤上,并向NameNode發送確認信息。最后,NameNode更新元數據信息并返回寫入結果給客戶端。
- 讀取流程:當客戶端需要從HDFS讀取數據時,首先向NameNode發送讀取請求,NameNode返回數據塊的位置信息給客戶端。然后客戶端通過HDFS客戶端從DataNode讀取數據塊,并將數據塊合并成完整的文件。
2. MapReduce的讀寫流程:
- 寫入流程:在MapReduce任務中,輸入數據通常從HDFS中讀取。MapReduce作業首先從HDFS中讀取輸入數據,然后將輸入數據劃分為InputSplit,每個InputSplit對應一個Map任務的輸入數據。接著,MapReduce框架會將InputSplit分配給不同的Map任務并將任務發送到集群中的各個節點上執行。
- 讀取流程:在MapReduce任務中,輸出數據通常會寫入HDFS中。每個Map任務會生成中間結果并將其寫入本地磁盤上的臨時文件中,而Reduce任務則會從各個Map任務的臨時文件中讀取中間結果并進行合并。最后,Reduce任務將最終結果寫入HDFS中。
總的來說,Hadoop的讀寫流程可以簡單概括為:數據寫入時先將數據劃分、復制并保存元數據信息,然后將數據塊保存在DataNode上;數據讀取時先獲取數據塊的位置信息,然后從DataNode讀取數據塊并進行合并處理。