目錄
HDFS
概念
HDFS的概念
存儲模型:位元組
架構模型
常用指令:
HDFS
概念
當資料集的大小超過一台獨立的計算機的存儲能力的時候,這個時候就有必要對檔案進行分區(partiiton)存儲在若幹台計算集上。管理網絡中跨多台計算機存儲的檔案系統,叫做分布式檔案系統(Distribute FileSystem )。該系統架構于網絡之上,勢必會引入網絡程式設計的複雜性,是以分布式檔案系統比普通磁盤檔案系統更為複雜,比如說:必須要容忍因為節點故障且不會引起資料丢失。
Hadoop 自帶一個稱為HDFS分布式檔案系統(Hadoop Distribute FileSuystem)。HDFS 以流式資料通路模式來存儲超大檔案,運作與商用硬體叢集上。
- 超大檔案:在這裡指的是具有幾百MB、幾百GB、甚至幾百TB大小的檔案。
- 流式資料通路模式:一次寫入,多次讀取是最高效的設計模式。
- 低時間延遲的資料通路:要求低延遲的資料通路的應用,例如幾十毫秒,不适合在HDFS上運作。(HDFS是為高吞吐量優化的,這可能會以提高時間延遲為代價)
- 大量小檔案:
- 多使用者寫入,任意修改檔案:HDFS中的檔案寫入隻支援單寫入者,而且寫入者隻以“追加”的方式在檔案末尾寫資料,不支援多個寫入者,也不支援在任意位置修改資料。
HDFS的概念
- 資料塊(block):預設128MB。
- namenode 和 datenode
- 塊緩存:
- 聯邦HDFS: viewfs://URI
存儲模型:位元組
- 檔案線性切割成塊(Block):偏移量Offset(byte)(Block切割字元的下标)
- Block分散存儲在叢集節點上
- 單一檔案Block塊大小一緻,不同檔案的Block塊大小可以不一緻。
- Block可以設定副本數,副本(資料的可靠性。可用性)分散在叢集不同的節點中。
--副本數不可以超過節點數量
- 檔案上傳可以設定Block大小和副本數量
- 已上傳的Block副本數可以調整,大小不變
- 隻支援一次寫入(append追加在檔案末尾),多次讀寫,同一時刻隻允許有一個寫入者
架構模型
- 檔案中繼資料MataData,檔案資料
- (從)資料本身(Block資料)存儲在DateNode:多節點
- (主)中繼資料(檔案名、大小、塊資訊等)存儲在namenode:單節點
- DataNode 和NameNode保持心跳,送出Block清單資訊
- HdfsClient和NameNode交換中繼資料資訊
- HdfsClient和DataNode交換Block資料
初識Hadoop 之 HDFS 及安裝【持續更新中......】HDFS
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPBpVboJDZ6x2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4kTM0QjNxkTM1ITMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
NameNode(NN)
- 基于記憶體存儲:不會和磁盤發生交換
- 隻存在記憶體中
- 持久化(運作是單向落在磁盤中,重新開機的時候讀回來,具體方法後面)
- NameNode主要功能
- 接收用戶端的讀寫功能
- 收集DateNode彙報的Block資訊
- NamoNode儲存的metaData資訊包括
- Block塊清單(偏移量)(持久化存儲的資訊),位置資訊(資料存儲的位置)
- 副本的存儲位置(由DataNode(心跳)上報)
- 檔案大小,時間
NameNode持久化
- NameNode的metadata資訊會在啟動會加載到記憶體
- matadata存儲到磁盤的名稱為fsimage
- Block塊資訊不回儲存到fsimage
- edits(editsLog)記錄對metadata的記錄檔
- (合并fsimage 和 editsLog ,縮短叢集恢複的時間)
DataNode(DN)
- 本地磁盤存儲資料(Block),檔案形式
- 同時存儲Block的中繼資料資訊
- 啟動DN時會向NN彙報block資訊
- 通過向NN發送心跳保持與其聯系(3秒一次),如果NN十分鐘沒有收到DN的心跳,認為其已經lost,會copy其上的block到其他DN
SecondaryNameNode(SNN)(1.x)
- 它不是NN的備份(但是可以做備份),它的主要工作是幫助NN合并editslog,減少NN啟動時間
- SNN執行合并時機
- 根據配置檔案設定的時間間隔<fs.checkpoint.period>,預設3600秒
- 根據配置檔案設定的edits log 大小,fs.checkpoint.size,預設大小64MB
Block的副本放置政策
- 第一個副本放置在上傳檔案的DN上,
- 第二個副本放置在與第一個副本不同的機架的節點上
- 第三個副本放置在與第二個副本相同的機架上不同節點上
HDFS寫流程
-
初識Hadoop 之 HDFS 及安裝【持續更新中......】HDFS
HDFS讀流程
- open-->getBlockLocationInfo-->read
HDFS安裝
- 環境:CentOS-6.10-x86_64-minimal.iso
- JDK:jdk-8u171-linux-x64.tar.gz
- Hadoop:hadoop-2.6.0.tar.gz
- 1、首先安裝上傳下載下傳功能
root 賬号登陸後執行以下指令:
yum
install
-y lrzsz
- 2、mkdir -p /usr/local/java
- 3、cd /usr/local/java/
- 4、rz -e jdk-8u171-linux-x64.tar.gz 或者 rz -be jdk-8u171-linux-x64.tar.gz
- 5、tar -zxvf jdk-8u171-linux-x64.tar.gz
- 6、pwd (複制目前路徑)
-
初識Hadoop 之 HDFS 及安裝【持續更新中......】HDFS - 7、vim /etc/profile
-
8、JAVA_HOME=/usr/local/java/jdk1.8.0_181
JRE_HOME=/usr/local/java/jdk1.8.0_181/jre
CLASSPATH=.:$JAVA_HOME:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:
export PATH JAVA_HOME CLASSPATH
- 9、 source /etc/profile
- 10、java -version
初識Hadoop 之 HDFS 及安裝【持續更新中......】HDFS
常用指令:
- default.fs="hdfs://localhost/"
- dfs.replication=3
- hdfs 預設端口8020 運作namenode