hdfs讀寫流程 HDFS 讀寫流程(詳解)

2021-10-11 08:58:38 字數 1691 閱讀 4622

hdfs(hadoop distributed file system)是gfs的開源實現。

1、優點

因為有多個副本,可以保證資料可靠,容錯性高

計算向資料移動,適用於批處理

適合大資料處理,gb、tb、pb級資料,百萬以上的檔案,十萬以上的節點

可以構建在廉價機器上,通過多副本提高可靠性

2、缺點

不支援低延遲的資料訪問,無法再毫秒之內返回結果

小檔案對於hdfs是致命的,會占用大量的namenode的儲存空間

寫流程如下:

1、客戶端訪問namenode,namenode檢查路徑和許可權,如果路徑中有與要上傳的檔案重名的檔案就不能上傳了,不能覆蓋,如果沒有才建立,建立名為file.copying的臨時檔案;

2、namenode觸發副本放置策略,如果客戶端在集群內的某一台機器,那麼副本第一塊放置在該伺服器上,然後再另外挑兩台伺服器;如果在集群外,namenode會根據策略先找乙個機架選出乙個datanode,然後再從另外的機架選出另外兩個datanode,然後namenode會將選出的三個datanode按距離組建乙個順序,然後將順序返回給客戶端;

3、客戶端會根據返回的三個節點和第乙個節點建立乙個socket連線(只會和第乙個節點建立),第乙個節點又會和第二個節點建立socket連線,由第二個節點又會和第三個節點建立乙個socket連線,這種連線的方式叫pipeline;

4、客戶端會將block切分成package(預設是64kb),以流式在pipeline中傳輸

好處:(1)速度快:時間線重疊(其實流式也是一種變異的並行);

(2)客戶端簡單:副本的概念是透明的;

5、由datanode完成接收block塊後,block的metadata(md5校驗用)通過乙個心跳將資訊匯報給namenode;

6、如果再pipeline傳輸中,任意節點失敗,上游節點直接連線失敗節點的下游節點繼續傳輸,最終在第5步匯報後,namenode會發現副本數不足,一定會觸發datanode複製更多副本,客戶端client副本透明;

7、client一直重複以上操作,逐一將block塊上傳,同時datanode匯報block的位置資訊,時間線重疊;

8、最終,如果namenode收到了datanode匯報的所有塊的資訊,將檔案的.copying去掉,檔案可用。

讀流程如下:

1、客戶端和namenode建立連線,獲取檔案block的位置資訊(fileblocklocations)

需要用inputstream.seek(long)//從什麼位置開始讀取,和哪個datanode開始連線獲取block;

3、距離的概念:只有檔案系統在讀流程中附加距離優先的概念,計算層才能夠被動實現計算向資料移動,距離有以下三種:

(1)本地,最近的距離;

(2)同機架,次之的距離;

(3)other(資料中心),最遠的距離;

看到了這裡,你會發現 hdfs 檔案系統的讀寫流程並不複雜,很容易被小夥伴們忽略,所以趕緊mark起來吧!

我是大資料每日嗶嗶,歡迎關注我,一起聊大資料!

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...

hdfs讀寫流程

1.client發起檔案上傳請求 通過rpc和namenode建立連線,namenode檢查目標檔案是否存在,檢查父目錄是否存在,檢查使用者是否有許可權,返回是否可以上傳 2.client請求第乙個block該傳輸到那些datanode伺服器上 3.namenode根據配置檔案中指定的備份數量及機架...

HDFS讀寫流程

hdfs讀寫流程 一 hdfs讀檔案流程 1 client通過filesystem.open filepath 方法,去與namenode進行rpc通訊,返回該檔案的部分或全部的block列表 也包含該列表各 block 的分布在 datanode 位址的列表 也就是返回fsdatainputstr...