HDFS 執行流程

2022-09-11 17:18:13 字數 1450 閱讀 8430

客戶端檔案讀資料流程:

1、客戶端通過呼叫filesystem 的 open方法獲取需要讀取的資料檔案。

2、dfs 通過rpc來呼叫namenode,獲取要讀取的資料檔案對應的block存放在哪些datanode上。

3、客戶端先到距離最近的datanode上呼叫fsdatainputstream 的read 方法,將資料從datanode傳輸到客戶端。

4、當讀取完所有的資料後,fsdatainputstream 會關閉與datanode的連線,尋找下一塊的最佳位置(即距離最近的下一塊)。

5、當客戶端完成讀取操作之後,會呼叫fsdatainputstream的close方法完成對資源的關閉工作。

客戶端寫資料流程:

1、客戶端通過呼叫dfs的create 方法來建立乙個檔案。

2、dfs 向namenode 發起rpc請求,在namespace 中建立乙個新的檔案

3、客戶端呼叫fsdataoutputstream 的write方法將資料寫到乙個內部佇列中,假設副本係數為3,那麼將佇列中的資料寫入到三個副本對應的datanode上

4、fsdataoutputstream 內部維護者乙個確認佇列,當接收到所有datanode寫完訊息之後,資料才會從確認佇列中消除

5、當客戶端完成資料的寫入之後,會對資料流呼叫close方法關閉資源。

hdfs上的檔案對應的block 儲存有多個副本並且提供容錯機制,因此副本丟失或者宕機時能夠自動恢復,預設將會儲存三個副本

副本存放策略:

第乙個副本放置在上傳檔案的datanode上,如果是集群外提交,則隨機挑選乙個節點

第二個副本放置在與第乙個副本不同機架的節點上

第三個副本放置在與第二個副本相同機架的不同節點上。

上傳到hdfs系統中的檔案副本數是由當時的hadoop系統副本數決定的,不會受副本係數的影響。(比如說上傳hello.txt時的副本係數為3,那麼hello.txt 的副本數就是3,以後無論怎麼修改副本係數,hello.txt 的副本數都不會變了)

在上傳檔案時,可以指定副本係數。dfs.replication 是客戶端屬性,如果不指定,將會採用預設的副本數。

例如: hadoop fs -setrep 6 testhadoop/hello.txt 那麼hello.txt 的副本係數就是6。

指定的副本係數只會影響本次檔案的上傳,並不會修改掉預設的副本數,預設的副本數可以在hdfs-site.xml 中進行設定。

hdfs 負載均衡:

當某個datanode 上的空閒空間低於某個閾值後,系統將會自動地將資料從這個datanode上同步到其他的資料節點上。

在hadoop 中,包含乙個start-balancer.sh的指令碼,通過這個指令碼可以設定hdfs 的資料均衡服務。

./start-balancer.sh -threshold 通過threshold 可以設定閾值,取值範圍0-100,預設是10.

理論上該引數值越小,整個集群越平衡。

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

hdfs hadoop distributed file system 是gfs的開源實現。1 優點 因為有多個副本,可以保證資料可靠,容錯性高 計算向資料移動,適用於批處理 適合大資料處理,gb tb pb級資料,百萬以上的檔案,十萬以上的節點 可以構建在廉價機器上,通過多副本提高可靠性 2 缺點...

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

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

hdfs讀寫流程

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