1. 程式人生 > >【大資料】HDFS

【大資料】HDFS

一、什麼是HDFS

HDFS是什麼:HDFS即Hadoop分散式檔案系統(Hadoop Distributed Filesystem),以流式資料訪問模式來儲存超大檔案,運行於商用硬體叢集上,是管理網路中跨多臺計算機儲存的檔案系統。

HDFS不適合用在:要求低時間延遲資料訪問的應用,儲存大量的小檔案,多使用者寫入,任意修改檔案。

二、HDFS的原理

1.hdfs資料塊

HDFS上的檔案被劃分為塊大小的多個分塊,作為獨立的儲存單元,稱為資料塊,起初預設大小是64MB,從2.7.3版本改成了128MB,這個塊大小可以在hdfs-site.xml修改它的大小

1.1使用資料塊的好處:
⑴一個檔案的大小可以大於網路中任意一個磁碟的容量
⑵使用抽象塊概念而非整個檔案作為儲存單元,大大簡化儲存子系統的設計
⑶提高可用性 將每個塊複製到少數幾個物理上相互獨立的機器上(預設為3個),可以確保在塊、磁碟或機器發生故障後資料不會丟失。如果發現一個塊不可用,系統會從其他地方讀取另一個副本。
1.2資料塊為什麼不能太大
⑴重啟過程中,資料塊越大,系統載入時間越長
⑵資料量的大小與問題解決的複雜度呈線性關係。對於同一個演算法,處理的資料量越大,時間複雜度越高。
⑶在Map Reduce框架裡,Map之後的資料是要經過排序才執行Reduce操作的。這通常涉及到歸併排序,而歸併排序的演算法思想便是“對小檔案進行排序,然後將小檔案歸併成大檔案”,因此“小檔案”不宜過大。
⑷資料量的大小與問題解決的複雜度呈線性關係。對於同一個演算法,處理的資料量越大,時間複雜度越高。
1.3資料塊為什麼不能太小
⑴減少硬碟尋道時間 如果資料塊太多,會增加底層硬碟的尋道時間,這是資料量不能太小的根本原因!!!
⑵減少NameNode記憶體消耗 資料塊資訊太多,會增加namenode的記憶體消耗

2.hdfs結構

在這裡插入圖片描述

⑴Client 客戶端
檔案切分。檔案上傳 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然後進行儲存。
與 NameNode 互動,獲取檔案的位置資訊
與 DataNode 互動,讀取或者寫入資料。
Client 提供一些命令來管理 HDFS,比如啟動或者關閉HDFS
Client 可以通過一些命令來訪問 HDFS
⑵NameNode 就是 master,它是一個主管、管理者,namenode記憶體中儲存的是=fsimage+edits。
管理 HDFS 的名稱空間
管理資料塊(Block)對映資訊
配置副本策略
處理客戶端讀寫請求
⑶Secondary NameNode 並非 NameNode 的熱備,儲存NameNode的一部分資訊。當NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務
輔助 NameNode,分擔其工作量,SecondaryNameNode負責定時預設1小時,從namenode上,獲取fsimage和edits來進行合併,然後再發送給namenode。減少namenode的工作量。
定期合併 fsimage和fsedits,並推送給NameNode
在緊急情況下,可輔助恢復 NameNode
⑷DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作
儲存實際的資料塊
執行資料塊的讀/寫操作
⑸fsimage 元資料映象檔案(檔案系統的目錄樹。)
⑹edits 元資料的操作日誌(針對檔案系統做的修改操作記錄)

3.hdfs寫入

在這裡插入圖片描述

⑴客戶端通過呼叫 DistributedFileSystem 的create方法,建立一個新的檔案

4.hdfs讀取