HDFS分佈式文件存儲系統

 

1. Hadoop是什麼

1.1 Hadoop架構

Hadoop由三個模塊組成:分佈式文件存儲HDFS、分佈式計算MapReduce、資源調度引擎Yarn

1.2 分佈式是什麼

分佈式:利用一批通過網絡連接的、廉價普通的機器,完成單個機器無法完成的存儲、計算任務

1.3 HDFS是什麼

Hadoop分佈式文件系統

1.4 爲什麼使用HDFS

高可用、容錯、可擴展

2.核心概念block

2.1 數據塊block

2.1.1 HDFS block塊

HDFS3.x上的文件,是按照128M爲單位,切分成一個個block,分散存儲在集羣的不同數據節點datanode上

問:HDFS中一個44M大小的塊會不會佔據128M的空間?不會

2.2 block副本 保正數據的可用及容錯

replication = 3

dfs-site.xml

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

實際機房中,會有機架,每個機架上若干服務器

3.機架存儲策略

4. HDFS體系架構

HDFS是主從架構Master/Slave、管理節點/工作節點
4.1 NameNode
fs文件系統,用來存儲、讀取數據

NameNode主要用來幹嘛的?

1. 管理節點,負責管理文件系統和命名空間,存放了HDFS的元數據;
2. 元數據信息包括文件系統樹、整棵樹所有的文件和目錄、每個文件的塊列表、塊所在的datanode等;
3. 元數據信息以命名空間鏡像文件fsimage和編輯日誌(edits log)的方式保存
Fsimage:元數據鏡像文件 ,保存了文件系統目錄樹信息以及文件和塊的對應關係
edits log:日誌文件 ,保存文件系統的更改記錄

4.2 DataNode
存儲block,以及block元數據包括數據塊的長度、塊數據的校驗和、時間戳
4.3 SeconddaryNameNode
它一般部署在另外一臺節點上,因爲它需要佔用大量的CPU時間,並需要與namenode一樣多的內存,來執行合併
操作

5.HDFS心跳機制

工作原理:
1. master啓動的時候,會開一個ipc server在那裏。

2. slave啓動,連接master,每隔3秒鐘向master發送一個“心跳”,攜帶狀態信息;
3. master通過這個心跳的返回值,向slave節點傳達指令
作用:
1. Namenode全權管理數據塊的複製,它週期性地從集羣中的每個Datanode接收心跳信號和塊狀態報告
(Blockreport)。接收到心跳信號意味着該Datanode節點工作正常。塊狀態報告包含了一個該 Datanode上所
有數據塊的列表
2. DataNode啓動後向NameNode註冊,通過後,週期性(1小時)的向 NameNode上報所有的塊的列表;
每3秒向NamNode發一次心跳,返回NameNode給該DataNode的命令;如複製塊數據到另一臺機器,或刪
除某個數據塊。如果NameNode超過10分鐘沒有收 到某個DataNode 的心跳,則認爲該節點不可用。
3. hadoop集羣剛開始啓動時,會進入安全模式(99.9%),就用到了心跳機制

6.HDFS寫流程介紹

這裏描述的 是一個256M的文件上傳過程 

由客戶端 向 NameNode節點 發出請求

②NameNode 向Client返回可以存數據的 DataNode 這裏遵循  機架感應  原則

客戶端 首先 根據返回的信息 先將 文件分塊(Hadoop2.X版本 每一個block爲 128M 而之前的版本爲 64M

然後通過nameNode返回的DataNode信息 直接發送給DataNode 並且是 流式寫入  同時 會複製到其他兩臺機器

⑤dataNode 向 Client通信 表示已經傳完 數據塊 同時向NameNode報告

依照上面(④到⑤)的原理將 所有的數據塊都上傳結束 向 NameNode 報告 表明 已經傳完所有的數據塊 

這樣 整個HDFS上傳流程就 走完了

7.HDFS讀流程介紹

1clientnamenode通信查詢元數據,找到文件塊所在的datanode服務器

2、隨機挑選一臺datanode(就近原則,然後隨機)服務器,請求建立socket

3datanode開始發送數據(從磁盤裏面讀取數據放入流,以packet爲單位來做校驗)

4、客戶端以packet爲單位接收,先在本地緩存,然後寫入目標文件

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章