hdfs的概念:node
HDFS,它是一個文件系統,用於存儲文件,經過目錄樹定位文件,其次,他是分佈式的,由不少服務器聯合起來 實現功能,集羣中的服務器各有各自的角色web
HDFS設計適合一次寫入,屢次讀出的場景,且不支持文件的修改,適合用來作數據分析,並不適合作網盤等應用緩存
HDFS的組成:安全
HDFS集羣包括,NameNode和DataNode以及Secondary NameNodebash
NameNode負責管理整個文件系統的元數據,以及每個路徑(文件) 所對應的數據塊信息服務器
DataNode負責管理用戶的文件數據塊,每個數據塊能夠在多個NameNode上存儲多副本分佈式
SecondNameNode 用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取HDFS元數據的快照oop
HDFS的快比磁盤塊大的緣由:設計
目的是爲了最小尋址開銷 尋址時間爲傳輸時間的1%時,則爲最佳狀態。3d
hdfs-默認Block塊大小是128M hadoop2.0如下默認塊是64M,經過hdfs的web端 能夠看到數據塊的BlockId 和 當前數據分爲多少個Block 例如2G的數據, 會分紅16個Block塊. 並且若是最後一個塊分配不滿的話,會動態伸縮 不會固定佔用128M
會的hdfs-client會報錯,可是數據會繼續上傳, 經過web端查看 還會顯示3副本,可用副本爲2,當DataNode啓動後,副本會進行重建, 若是datanode出現問題 client會從新獲取datanode節點 進行同步
查看DataNode的日誌
sbin/hadoop-daemon.sh start namenode 單獨啓動NameNode守護進程 sbin/hadoop-daemon.sh stop namenode 單獨中止NameNode守護進程 sbin/hadoop-daemon.sh start datanode 單獨啓動DataNode守護進程 sbin/hadoop-daemon.sh stop datanode 單獨中止DataNode守護進程
一、查看是否開啓機架感知
hdfs dfsadmin -printTopology
hadoop2.7.2副本節點選擇
第一個副本在client所處的節點上,若是客戶端在集羣外,隨機選擇一個
第二個副本和第一個副本在相同機架,隨機節點
第三個副本位於不一樣機架,隨機節點
經過web配置 或者 生成規定格式的Topology文件 在啓動hdfs
hdfs fsck /data -files -blocks
hdfs dfsadmin -rollEdits
1.第一次啓動namenode格式化後,建立fsimage和edits文件,若是不是第一次啓動,直接加載編輯日誌和鏡像文件到內存中
2.客戶端對元數據進行增刪改的請求
3.NameNode記錄操做日誌,更新滾動日誌 --編輯日誌,fsimage只在啓動讀取(索引)
4.nameNode在內存對數據進行增刪改查
2.第二階段 SecondNameNode工做
1.SecondNameNode詢問namenode是否須要checkpoint。直接返回namenode是否檢查結果
2.Second NameNode請求執行checkpoint
3.nameNode滾動正在寫的edits日誌
4.將滾動前的編輯日誌和鏡像文件拷貝到Second NameNode
5.SecondNameNode加載編輯日誌和鏡像文件 進行合併
6.生成新的鏡像文件fsimage.chkpoint
7.拷貝fsimage.chkpoint到namenode
8.namenode將新的fsimage.chkpoint重命名爲fsimage
3.web查看Second NameNode http://xxxxx:50090
4.chkpoint檢查時間參數設置
一般狀況下每隔一個小時執行一次,或者一分鐘檢查一次操做次數,當操做次數達到1百萬時候 執行一次
/tmp/dfs/name/current這目錄下有個VERSION
ClusterID 集羣的惟一ID 全局惟一
PS:
我今天不當心格式化了兩次hdfs 爲啥出現datanode就起不來?
解決方案1:
將全部節點的VERSION文件的clusterID改成一致
解決方案2:
將全部節點的臨時目錄所有刪除(data/tmp),從新格式化namenode便可
單獨啓動全部節點的datanode
hadoop-daemons.sh start datanode
注意:
在格式化hdfs的時候務必要關閉hdfs進程
1.NameNode啓動時,首先將鏡像文件(fsimage)載入內存,並執行編輯日誌(edits)中的各項操做,一旦在內存成功創建文件系統元數據鏡像,則建立一個新的fsimage文件和一個空的編輯日誌,此時,nameNode開始監聽datanode請求,可是此刻,namenode運行的安全模式,即namenode的文件系統對於客戶端是隻讀的.
系統中的數據塊的位置並非由namenode維護的,而是以塊列表的形式存儲在datanode中,在系統正常操做期間,namenode會在內存中保留全部的塊的映射信息,在安全模式下,各個datanode會向namenode發送最新塊列表信息,namenode瞭解到足夠多的塊位置以後,既可高效運行文件系統
若是知足"最小副本條件",namenode會在30秒以後退出安全模式,最小條件:整個文件系統99.9%的塊知足最小副本級別(默認值:dfs.replication.min=1),在啓動一個剛格式化 沒有任何塊的集羣,不會進入安全模式
[search@bsq10 current]$ hdfs dfsadmin -safemode get 查看安全模式
Safe mode is OFF
hdfs dfsadmin -safemode enter 進入安全模式
hdfs dfsadmin -safemode leave 退出安全模式
hdfs dfsadmin -safemode wait 等待安全模式
2nn如何恢復namenode的數據:
一、將2nn的數據放置到namenode的工做目錄
二、經過hdfs namenode -recover恢復數據
三、重啓hdfs
namenode和Datanode的真實數據(工做目錄)
===========================================================
namenode存儲HDFS的fsimage(鏡像文件) + edits(編輯日誌)
(1) Fsimage 文件:HDFS 文件系統元數據的一個永久性的檢查點,其中包含 HDFS文件系統的全部目錄和文件 idnode 的序列化信息。 //存放全部文件(夾)的索引 (2) Edits 文件:存放 HDFS 文件系統的全部更新的操做,文件系統客戶端執行的全部寫操做首先會被記錄到 edits 文件中。 //存放操做