HDFS分散式儲存

SmalllPig發表於2018-10-15

1. Hadoop歷史:

1.1建立者: Doug Cutting

1.2名字起源:  Doug Cutting 的孩子的棕黃色大象玩具的名字

1.3三駕馬車:
谷歌的三駕馬車:  GFS、MapReduce和BigTable
根據谷歌的三駕馬車得到了:HDFS、Hadoop、HBase

1.4hadoop生態圈:
HDFS:分散式儲存
Yarn:分散式資源管理器
Mapreduce:分散式計算框架
common:公共部分


2.HDFS儲存原理:

2.1各個角色及其作用:

NameNode:
1.接受客戶端的讀寫請求

2.管理後設資料:
2.1上傳檔案的許可權
2.2上傳檔案的屬主以及屬組
2.3上傳檔案的時間
2.4上傳檔案的block數以及ID號
2.5每一個Block的位置資訊是由DN在叢集啟動之時彙報的,不會持久化
2.6各個DN的位置資訊

3.管理DN

DataNode:
1.接受客戶端的讀請求
2.儲存block塊
3.向active NN彙報心跳
4.構建pipeline的管道
5.管理本機上的block後設資料

SNN:
SecondryNameNode 負責持久化,拉取NN節點上的edtis+fsimages檔案 合併

合併過程:
檔案拉取之時,在NN節點上會建立edits_new目的就是為了儲存在合併期間對HDFS的操作
1.基於拉來的edits檔案的重演,產生後設資料
2.將重演產生的後設資料合併到fsimages中
3.將合併後f’simages推送給NN
4.將edits.new檔案的字尾去掉

合併的觸發機制:
1.超過3600S就合併一次
2.edits檔案大小超過64M

ZKFC:
1.監控各自的NN,將監控的情況彙報給zk叢集
2.接受zk的選舉結果,確認一下另外一個NN是否真的掛了,將自己監控的NN提升為active

Journalone:
1.寫資料的時候,只需要保證半數以上的即誒但寫入成功就可以了
2.最終一致性/弱一致性
3.儲存的是edits

備用的NN:
1.監控journalone中資料變化,實時更新自己的記憶體資料
2.將記憶體中後設資料持久化到fsimages中,然後推送到NN

備份機制:
1.如果是叢集外操作們第一個block儲存在負載不高的節點上(預設128M dfs.blocksize 嚴格按照位元組切割,如果儲存的是中文,會出現亂碼問題)
2.如果叢集內操作,在本機
第二個block在其他機架隨機一臺伺服器上
第三個block在與第二個block同機架的其他節點上

HDFS的讀寫流程:
讀流程:
1.client訪問NameNode,查詢後設資料資訊,獲得這個檔案的資料塊位置列表,返回輸入流物件。
2.就近挑選一臺datanode伺服器,請求建立輸入流 。
3.DataNode向輸入流中中寫資料,以packet為單位來校驗。
4.關閉輸入流
寫流程:
1.client計算block的數量,切割大檔案成一個個block
2.使用者端client向NameNode彙報上傳檔案的許可權、資料塊block數和上傳時間,這些內容在此時被載入到NameNode的記憶體中。
3.請求一個id號和請求存放的block位置
4.NameNode將當前負載不高的DataNode的地址傳送給client
5.將block切割成一個個packet(64K),然後源源不斷地往Pipeline管道(多個備份和一份資料)中傳送,實現並行儲存。
6.DataNode儲存完一個塊後向NameNode彙報當前的儲存情況(block的位置),此時此資訊被載入到NameNode記憶體中。

搭建叢集的三種模式:
1.偽分散式,測試環境使用
2.完全分散式: hdfs-site.xml、core-site.xml、 slaves從節點hostname
3.高可用的完全分散式:
3.1 hdfs-site.xml、core-site.xml、 slaves從節點hostname、
3.2格式化、
3.3將本機的NN啟動、
3.4去備用的NN節點,同步後設資料、
3.5格式化ZKFC(先啟動zookeeper)、
3.6關閉所有節點、
3.7start-dfs.sh:
3.7.1安全模式1、NN會將fsimage與edits合併 2、檢查各個及誒點上的block塊以及副本是否符合要求,若不符合要求,指揮儲存資料丟失的DN做備份 3、檢查各個DN的健康狀況
3.7.2正常對外提供儲存服務

HDFS的優缺點:
1.優點:
1.1副本機制,所以資料更安全
1.2因為是分散式儲存,所以適合批處理
1.3高可用性
1.4後設資料持久化
1.5禁掉一些功能,使叢集更加完美(修改功能,檔案一旦上傳,就不能修改block的大小)
2.缺點:
1.無法毫秒級的讀寫資料:讀寫複雜需要找nn請求,形成管道,檔案切割block packet
2.不適合儲存大量的小檔案:容易造成後設資料過多,NN記憶體溢位,解決方法:1.將小檔案合併成打檔案、2.聯邦機制
3.不能併發寫入,但是可以併發的讀

JAVAAPI:
準備環境:
1.本機配置HADOOP_HOME
2.替換bin目錄
3.修改使用者名稱
4.匯入JAR
5.安裝外掛,方便在ecplise中操作叢集

相關文章