HDFS檔案系統

2021-08-15 11:17:23 字數 3013 閱讀 2703

hdfs 是 hadoop distribute file system 的簡稱,意為:hadoop 分布式檔案系統。是hadoop 核心元件之一,作為最底層分布式儲存服務而存在。分布式檔案系統解決的問題就是大資料儲存。它們是橫跨在多台計算機上的儲存系統。分布式檔案系統在大資料時代有著廣泛的應用前景,它們為儲存和處理超大規模資料提供所需的擴充套件能力。

1、元資料管理

我們把目錄結構及檔案分塊位置資訊叫做元資料。namenode 負責維護整個hdfs 檔案系統的目錄樹結構,以及每乙個檔案所對應的 block 塊資訊(block 的id,及所在的 datanode 伺服器)

檔案的各個 block 的具體儲存管理由 datanode 節點承擔。每乙個 block都可以在多個datanode 上。datanode 需要定時向namenode 匯報自己持有的block資訊。儲存多個副本(副本數量也可以通過引數設定 dfs.replication,預設是 3,datanode啟動時,它將自己發布到 namenode 並匯報自己負責持有的塊列表,當某個 datanode 關閉時,它不會影響資料或群集的可用性。namenode 將安排由其他datanode 管理的塊進行副本複製,datanode 會定期(dfs.heartbeat.interval配置項配置,預設是 3 秒)向namenode 傳送心跳,如果namenode 長時間沒有接受到 datanode 傳送的心跳,namenode 就會認為該 datanode失效block 匯報時間間隔取引數 dfs.blockreport.intervalmsec,引數未配置的話預設為 6 小時

namenode 負責管理整個檔案系統元資料;datanode 負責管理具體檔案資料 塊儲存;secondary namenode 協namenode進行元資料的備份。 hdfs 的內部工作機制對客戶端保持透明,客戶端請求訪問 hdfs 都是通過向 namenode 申請來進行

詳細步驟解析:

1、 client 發起檔案上傳請求,通過 rpc 與 namenode 建立通訊,namenode 檢查目標檔案是否已存在,父目錄是否存在,返回是否可以上傳;

2、 client 請求第乙個 block 該傳輸到哪些 datanode 伺服器上;

3、 namenode 根據配置檔案中指定的備份數量及機架感知原理進行檔案分 配,返回可用的 datanode 的位址如:a,b,c; 注:hadoop 在設計時考慮到資料的安全與高效,資料檔案預設在 hdfs 上存放 三份,儲存策略為本地乙份,同機架內其它某一節點上乙份,不同機架的某一 節點上乙份。

4、 client 請求 3 臺 datanode 中的一台 a 上傳資料(本質上是乙個 rpc 調 用,建立 pipeline),a 收到請求會繼續呼叫 b,然後 b 呼叫 c,將整個 pipeline 建立完成,後逐級返回 client;

5、 client 開始往 a 上傳第乙個 block(先從磁碟讀取資料放到乙個本地內 存快取),以 packet 為單位(預設 64k),a 收到乙個 packet 就會傳給 b, b 傳給 c;a 每傳乙個 packet 會放入乙個應答佇列等待應答。

6、 資料被分割成乙個個 packet 資料報在 pipeline 上依次傳輸,在 pipeline 反方向上,逐個傳送 ack(命令正確應答),最終由 pipeline 中第乙個 datanode 節點 a 將 pipeline ack 傳送給 client;

7、 當乙個 block 傳輸完成之後,client 再次請求 namenode 上傳第二個 block 到伺服器

詳細步驟解析:

1、 client 向 namenode 發起 rpc 請求,來確定請求檔案 block 所在的位置;

2、 namenode會視情況返回檔案的部分或者全部block列表,對於每個block, namenode 都會返回含有該 block 副本的 datanode 位址;

3、 這些返回的 dn 位址,會按照集群拓撲結構得出 datanode 與客戶端的距 離,然後進行排序,排序兩個規則:網路拓撲結構中距離 client 近的排 靠前;心跳機制中超時匯報的 dn 狀態為 stale,這樣的排靠後;

4、 client 選取排序靠前的 datanode 來讀取 block,如果客戶端本身就是 datanode,那麼將從本地直接獲取資料;

5、 底層上本質是建立 socket stream(fsdatainputstream),重複的呼叫 父類 datainputstream 的 read 方法,直到這個塊上的資料讀取完畢;

6、 當讀完列表的 block 後,若檔案讀取還沒有結束,客戶端會繼續向 namenode 獲取下一批的 block 列表;

7、 讀取完乙個 block 都會進行 checksum 驗證,如果讀取 datanode 時出現 錯誤,客戶端會通知 namenode,然後再從下乙個擁有該 block 副本的 datanode 繼續讀。

8、 read 方法是並行的讀取 block 資訊,不是一塊一塊的讀取;namenode 只 是返回client請求包含塊的datanode位址,並不是返回請求塊的資料;

9、 最終讀取來所有的 block 會合併成乙個完整的最終檔案。

HDFS檔案系統總結

hdfs預設快大小128m hdfs小於乙個塊大小的檔案不會佔據整個塊空間 對檔案系統塊檢查 hdfs fsck files blocks namenode管理檔案系統的命名空間,維護者檔案系統及整顆樹內所有檔案和目錄,這些資訊以兩個檔案形式永久儲存在本地磁碟上 命名空間映象檔案和編輯日誌檔案,也記...

Hadoop 檔案系統(HDFS)

磁碟傳輸速率100m s,定址時間10ms,讓定址時間是傳輸時間的1 所以塊的大小為 100 0.01s 100m s 100m 128m 在 hdfs default.xml 中搜尋dfs.blocksize,可以修改大小 檔案上傳 檢查檔案block的狀態 由上可見,狀態是健康的 啟動所有資料節...

hdfs檔案系統掛載

使用fuse將hdfs檔案系統掛載遠端伺服器上,像使用nfs和glusterfs那樣可以掛載共享儲存 fuse可以編譯安裝或者通過cdh或ambari源yum安裝 此處使用ambari 配置ambari官方源,然後就可以yum安裝了sudo 注意 安裝fuse只需要在客戶端 即需要掛載hdfs的伺服...