DataNode的寫操作流程
DataNode的寫操作流程可以分為兩部分,第一部分是寫操作之前的准備工作,包括與NameNode的通信等;第二部分是真正的寫操作。
一、准備工作
1、首先,HDFS client會去詢問NameNoed,看哪些DataNode可以存儲Block A,file.txt文件的拆分是在HDFS client中完成的,拆分成了3個Block(A B C).因為NameNode存儲着整個文件系統的元數據,它知道哪個DataNode上有空間可以存儲這個Block A.
2、NameNode通過查看它的元數據信息,發現DataNode1、2、7上有空間可以存儲Block A,預示將此信息高速HDFS Client.
3、HDFS Client接到NameNode返回的DataNode列表信息后,它會直接聯系第一個DataNode-DataNode 1,讓它准備接收Block A--實際上就是建立彼此之間的TCP連接。然后將Block A和NameNode返回的所有關於DataNode的元數據一並傳給DataNode1.
4、在DataNode1與HDFS Client建立好TCP連接后,它會把HDFS Client要寫Block A的請求順序傳給DataNode2(在與HDFS Client建立好TCP連接后從HDFS Client獲得的DataNode信息),要求DataNode2也准備好接收Block A(建立DataNode2到DataNode1的TCP連接)。
5、同上,建立DataNode2到DataNode7的TCP連接
6、當DataNode7准備好之后,它會通知DataNode2,表示可以開始接收Block A
7、同理,當DataNode2准備好之后,他會通知DataNode1,表明可以開始接收Block A
8、當HDFS Client接收到DataNode1的成功反饋信息后,說明這3個DataNode都已經准備好了,HDFS Client就會開始往這三個DataNode寫入Block A
二、流程
在DataNode1 2 7都准備好接收數據后,HDFS Client開始往DataNode1寫入Block A數據。同准備工作一樣,當DataNode1接受完A數據后,它會順序將Block A數據傳輸給DataNode2,然后DataNode2再傳輸給DataNode7.每個DataNode在接受完Block A 數據后,會發消息給NameNode,告訴他Block數據已經接收完畢,NameNode同時會根據它接收到的小心更新它保存的文件系統元數據信息。當Block A成功寫入3個DataNode之后,DataNode1會發送一個成功消息給HDFS Client,同時HDFS Client也會發一個Block A成功寫入的信息給NameNode,之后HDFS Client才能開始繼續處理下一個Block:Block B。
DataNode的讀操作流程:
首先,HDFS Client會先去聯系NameNode,詢問file.txt總共分為幾個Block ,而且這些Block分別存放在哪些DataNode上。由於每個Block都會存在幾個副本,所以NameNode會把file.txt文件組成的Block對應的所有DataNode列表都返回給HDFS Client.然后HDFS Client會選擇DataNode列表里的第一個DataNode去讀取對應的Block,比如Block A存儲在DataNode 1 2 7,那么HDFS Client會到DataNode1去讀取Block A,Block c存儲在DataNode7 8 9那么HDFS Client就回到DataNode7去讀取Block C.