1. 程式人生 > 其它 >hdfs的塊大小以及hdfs的讀寫流程

hdfs的塊大小以及hdfs的讀寫流程

  • hdfs上的檔案是以塊為單位進行儲存的

    大小一般設定為128m,不能太小,也不能太大。

詳細情況看以下連結

hdfs塊大小設定原因

  • hdfs的寫資料流程

(1)客戶端向 NameNode 請求上傳檔案,NameNode 檢查目標檔案是否已存在,父目錄是否存在。

(2)NameNode 返回是否可以上傳

(3)客戶端請求第一個 Block 上傳到哪幾個 DataNode 伺服器上

(4)NameNode 返回 比如3 個 DataNode 節點,分別為 dn1、dn2、dn3。這些節點由計算最短距離得到

(5)客戶端將需要上傳的資料封裝為一個個的 chunk,當chunk累計大小到達64k時,就將這他們封裝為一個packet,一個個的packet組成packet佇列,等待上傳。

         與此同時,還有一個ACK佇列存在,ACK佇列不但儲存校驗資訊,還會儲存一份packet資料,以供dn寫入資料失敗重新讀取。

(6)客戶端請求 dn1 上傳資料,dn1 收到請求會繼續呼叫dn2,然後 dn2 呼叫 dn3,將這個通訊管道建立完成。

(7)dn1、dn2、dn3 逐級應答客戶端。

(8)客戶端開始往 dn1 上傳第一個 Block(先從磁碟讀取資料放到一個客戶端的本地記憶體快取,達到64k就封裝成一個packet放入packetc佇列),以 Packet 為單位,dn1 收到一個 Packet 就會傳給 dn2,dn2 傳給 dn3;dn1 每傳一個 packet

         會放入一個應答佇列等待應答。注意客戶端將一個檔案分割成多個block塊儲存到hdfs上,這裡的dn1傳給dn2,dn2傳給dn3是在做每個block塊的備份,hdfs預設是3份,所以這裡舉例三個節點

(9)當一個 Block 傳輸完成之後,客戶端再次請求 NameNode 上傳第二個 Block 的服務

器。(重複執行 3-7 步)。

  • hdfs讀資料流程

(1)客戶端 向 NameNode 請求下載檔案,NameNode 通過查詢元資料,找到檔案塊所在的 DataNode 地址。

(2)挑選一臺 DataNode伺服器,優先找最近的節點讀取,如 DataNode1, block1。若最近的節點負載過高,則找下個節點讀取下個block,如DataNode2, block2。請求讀取資料。

(3)DataNode 開始傳輸資料給客戶端(從磁盤裡面讀取資料輸入流,以 Packet 為單位來做校驗)。hdfs是以block塊來儲存的,但是datanode和客戶端之間傳遞資料是以組成每個block塊的packect為單位來傳輸的。

(4)客戶端以 Packet 為單位接收,先在本地快取,然後寫入目標檔案