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讀流程介紹
1、client跟namenode通信查詢元數據,找到文件塊所在的datanode服務器
2、隨機挑選一臺datanode(就近原則,然後隨機)服務器,請求建立socket流
3、datanode開始發送數據(從磁盤裏面讀取數據放入流,以packet爲單位來做校驗)
4、客戶端以packet爲單位接收,先在本地緩存,然後寫入目標文件