1.設計基礎目標
(1) 錯誤是常態,需要使用數據冗余
(2)流式數據訪問。數據批量讀而不是隨機速寫,不支持OLTP,hadoop擅長數據分析而不是事物處理。
(3)文件采用一次性寫多次讀的模型,文件一旦寫入就無法修改。所以一致性模型非常簡單。
(4)程序采用 數據就近 原則分配節點執行。(MapReduce)
2.hdf體系結構
hadfs設計十分簡單,在我的1個master和兩個slave節點的集群中,通過jps,可以查看在master節點上運行着SecondaryNameNode ,NameNode,JobTracker
在slave結點上運行着DataNode和TaskTracker進程
1.NameNode:管理文件系統的命名空間,記錄每個文件數據快在各個DataNode上的位置和副本信息,記錄命名空間內的改動或空間本身屬性的改動;協調客戶端對文件的訪問;
NameNode使 用事物日志記錄HDFS元數據的變化,使用映像文件存儲文件系統的命名空間,
2.DataNode:管理存儲節點,一次寫入,多次讀取,不支持修改。文件由數據塊組成,包括文件映射,文件屬性。默認的數據塊大小為64MB,數據塊盡量散布在各個節點中,負載均衡。
3.讀取數據流程:客戶端要訪問HDFS中的文件,首先從NameNode獲取組成這個文件的數據塊位置列表,根據數據塊位置列表,知道存儲數據塊的DataNode,訪問DataNode獲取數據,NameNode並不參與數據實際傳輸。
3.HDFS分布式文件系統的可靠性
- 副本冗余:在hdfs-site.xml中可以設置副本的數量,DataNode啟動時,首先會遍歷本地的文件系統,產生一份hdfs數據塊和本地文件的對應關系列表(blockreport)匯報給namenode。
- 機架策略:通過“機架感知”,將數據塊副本存儲在不同的機架中。
- 心跳機制:NameNode周期性的從datanode接受心跳信號和塊報告。根據塊報告驗證元數據,副本數量、磁盤錯誤、節點宕機。
- 安全模式:NameNode啟動時會經過“安全模式”階段,安全模式不會產生數據寫。可以通過命令強制集群進入安全模式。
- 校驗和:文件創立的時候,每個文件都會產生校驗和,校驗和會作為一個隱藏文件保存在命名空間下,客戶端獲取數據時可以檢查校驗和是否相同,從而法相數據塊是否損壞。
- 回收站:HDFS提供回收站功能。
- 元數據保護:映像文件和事物日志是Namenode的核心數據。可以配置為擁有多個副本,副本會降低Name的處理速度,但是增加安全性。
- 快照
4.HDFS文件操作(命令行操作和API調用的方式)
列出文件:hadoop dfs -ls 后可接上目錄
文件上傳:hadoop dfs -put 本地文件 hdfs目錄
文件復制到本地:hadoop dfs -get
文件刪除:hadoop dfs -rmr 目錄或文件名
文件查看:hadoop dfs -cat 文件名
查看HDFS的基本統計信息:hadoop dfsasmin -report
進入/退出安全模式:hadoop dfsadmin -safemode enter/leave
5.增加節點
- 在新節點安裝好hadoop
- 把namenode的有關配置文件復制到該節點
- 修改masters和slaves文件,增加該節點
- 設施ssh免密碼進入該結點
- 單獨啟動該節點上的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)
- 運行start-balancer.sh進行負載均衡。