1. 程式人生 > >HDFS 讀寫檔案流程詳解

HDFS 讀寫檔案流程詳解

1.HDFS寫流程:

    客戶端要向HDFS寫資料,首先要跟名稱節點通訊以確認可以寫檔案並獲得接收檔案塊的資料節點,然後,客戶端按順序將檔案逐個塊傳遞給相應資料節點,並由接收到塊的資料節點負責向其他資料節點複製塊的副本    如圖:
寫詳細步驟:
    1、根namenode通訊請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在    2、namenode返回是否可以上傳    3、client會先對檔案進行切分,比如一個blok塊128m,檔案有300m就會被切分成3個塊,一個128M、一個128M、一個44M請求第一個 block該傳輸到哪些datanode伺服器上    4、namenode返回datanode的伺服器        5、client請求一臺datanode上傳資料(本質上是一個RPC呼叫,建立pipeline),第一個datanode收到請求會繼續呼叫第二個datanode,然後第二個呼叫第三個datanode,將整個pipeline建立完成,逐級返回客戶端    6、client開始往A上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位(一個packet為64kb),當然在寫入的時候datanode會進行資料校驗,它並不是通過一個packet進行一次校驗而是以chunk為單位進行校驗(512byte),第一臺datanode收到一個packet就會傳給第二臺,第二臺傳給第三臺;第一臺每傳一個packet會放入一個應答佇列等待應答    7、當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器。 2.HDFS讀流程:
    客戶端將要讀取的檔案路徑傳送給名稱節點,名稱節點獲取檔案的元資訊(主要是塊的存放位置資訊)返回給客戶端,客戶端根據返回的資訊找到相應資料節點逐個獲取檔案的並塊在客戶端本地進行資料追加合併從而獲得整個檔案    如圖:
讀詳細步驟:
    1,跟名稱節點通訊查詢元資料(塊所在的資料節點節點),找到檔案塊所在的資料節點伺服器    2,挑選一臺資料節點(就近原則,然後隨機)伺服器,請求建立插座流    3,資料管理部開始傳送資料(從磁盤裡面讀取資料放入流,以包為單位來做校驗)    4,客戶端以分組為單位接收,先在本地快取,然後寫入目標檔案,後面的塊塊就相當於是附加到前面的塊塊最後合成最終需要的檔案。