Hadoop個人心得筆記之HDFS

                                              HDFS總結

目錄

                                              HDFS總結

一、概述

二、Block

1.文件上傳失敗:

2.解決方案: 

2、刪除在hdfs中配置的元數據目錄

3、重新格式化namenode(切換到hadoop目錄下的bin目錄下)

4、重新啓動hadoop集羣(切換到hadoop目錄下的sbin目錄下)

5.上傳成功

6.使用hadoop dfsadmin -report查看使用情況

7.查看

三、NameNode

一.創建一個文件夾

二.刪除文件夾

三.元數據

四、DataNode

五、SecondaryNameNode

六、複本放置策略

七、機架感知策略

八.特點


                   


一、概述

  1. 在HDFS中,存在兩類主要的節點:NameNode 和DataNode 
  2. NameNode負責管理DataNode,DataNode負責存儲數據
  3. 在存儲數據的時候會將數據進行切塊
  4. 爲了防止產生數據丟失,會將數據進行備份,備份稱之爲複本 - replication。在Hadoop中,默認複本數量爲3  備份兩次+之前的

1.指定NameNode的地址

2.指定DataNode的數據存放目錄

僞分佈式配置副本數遍必須爲1

二、Block

  1. 在存儲數據的時候會將數據進行切塊,每一個塊稱之爲是一個Block  一個文件切割多個Block
  2. Block是HDFS的基本存儲單位
  3. Hadoop2.0版本中,每一個Block默認是128M。可以通過dfs.blocksize來更改塊的大小,在更改的時候,單位是字節
  4. 如果一個文件的大小不足128M,那麼這個文件是多大在HDFS上就佔多大的地方
  5. 在HDFS中,會對Block進行編號 - BlockID
  6. 將數據切塊的意義:
    1. 便於存儲超大文件
    2. 便於進行快速的備份

1.文件上傳失敗:

2.解決方案: 

PS:因爲之前安裝分佈式的時候,挖了個坑,爬出來之後忘記,埋上了,又掉進去了

    查閱資料發現造成這個問題的原因可能是使用hadoop namenode -format格式化時格式化了多次造成那麼spaceID不一致,解決方案:

1、停止集羣(切換到/sbin目錄下)
$./stop-all.sh

2、刪除在hdfs中配置的元數據目錄

(即在core-site.xml中配置的hadoop.tmp.dir對應文件件)下面的所有數據;

  • $ rm -rf /home/hadoop/tmp/*

3、重新格式化namenode(切換到hadoop目錄下的bin目錄下)

  • $ ./hadoop namenode -format

4、重新啓動hadoop集羣(切換到hadoop目錄下的sbin目錄下)

  • $./start-all.sh

5.上傳成功

6.使用hadoop dfsadmin -report查看使用情況

7.查看

三、NameNode

  1. 管理DataNode和記錄元數據Meta
  2. 元數據包含:
    1. 記錄數據的虛擬存儲路徑  不存在的路徑
    2. 記錄文件的切塊數量         不同的文件切塊數量不同
    3. 記錄數據塊的存儲位置      
    4. 記錄數據塊的複本數量     不同文件備份數量不同
    5. 記錄文件權限                   校驗權限
  3. 元數據的大小是在150B左右
  4. NameNode將元數據維繫在內存以及磁盤中
  5. 元數據維繫在內存中的目的是爲了快速查詢
  6. 元數據維繫在磁盤中的目的是爲了崩潰恢復
  7. 元數據的存儲位置是由hadoop.tmp.dir屬性決定,如果不配置則默認使用/tmp
  8. 元數據在磁盤中是以edits文件和fsimage文件的形式存在
    1. edits:記錄寫操作
    2. fsimage:記錄元數據。fsimage中的元數據和內存中的元數據並不是同步的
  9. 當NameNode接收到寫請求之後,會先將該請求記錄到edits_inprogess文件中,如果記錄成功,則將該請求同步更新到內存中,修改內存中的元數據,內存修改完成之後會給客戶端返回一個ack表示成功
  10. 在HDFS中,會給每一次的寫操作分配一個編號 - 事務id - txid
  11. 當edits文件達到條件的時候會將操作更新到fsimage文件中,即修改fsimage文件中的元數據:
    1. 空間維度:當edits_inprogress文件達到指定大小的時候就會觸發更新,默認是64M,大小可以由fs.checkpoint.size(core-site.xml)來指定,默認單位是字節
    2. 時間維度:當距離上一次更新達到指定間隔時候的時候就會觸發更新,默認是1H,大小可以由fs.checkpoint.period來指定,默認單位是秒 3600S
    3. 重啓更新:NameNode重啓之後,會自動的將edits_inprogress中的操作更新到fsimage中
    4. 強制更新:hadoop dfsadmin -rollEdits
  12. 在更新的時候,會將edits_inprogress重命名爲edits_XXXXXX-XXXXXX,同時產生一個新的edits_inprogress
  13. 在Hadoop中,如果存在SecondaryNameNode,則更新過程是發生在SecondaryNameNode
  14. 在HDFS中,最核心的節點是NameNode。但是在Hadoop1.0版本中只能有1個NameNode,在Hadoop2.0版本中,進行了改變,允許多設置一個NameNode,代價是丟掉SecondaryNameNode
  15. NameNode通過心跳機制來管理DataNode:DataNode每隔定長時間會給NameNode發送心跳信息
  16. 默認情況下,DataNode每隔3s給NameNode發送一條信息
  17. 如果NameNode長時間(默認是10min)沒有收到某個DataNode的心跳信息,則認爲這個DataNode已經lost(丟失),此時NameNode會將這個DataNode中的數據再次備份,保證複本數量
  18. 心跳信息包含:
    1. 當前節點的狀態
    2. 當前節點中所存儲的數據塊信息
  19. NameNode重新啓動的時候,將edits中的操作更新到fsimage中,將fsimage中的元數據加載到內存中,等待DataNode的心跳(如果DataNode沒有心跳過來則要重新備份保證複本數量,校驗數據總量),這個過程稱之爲是安全模式(safe mode)。如果所有的校驗都成功,則HDFS會自動退出安全模式   
  20. 四千個節點 半個小時會退出安全模式  如果退不出去可以強制退出安全模式  hadoop dfsadmin -safemode leave
  21. 因爲安全模式的問題,所以在僞分佈式下,複本數量必須爲1 - 如果複本數量不爲1,則重啓NameNode的時候,會導致HDFS一直處於安全模式    

一.創建一個文件夾

二.刪除文件夾

三.元數據

  1. edits:記錄寫操作
  2. fsimage:記錄元數據。fsimage中的元數據和內存中的元數據並不是同步的

四、DataNode

  1. 用於存儲數據,注意數據是以Block形式存儲
  2. 數據在DataNode上的存儲位置由hadoop.tmp.dir屬性決定,存儲目錄是dfs/data/current/塊池/current/finalized/subdir0/subdir0
  3. DataNode會通過心跳機制(RPC方式)來向NameNode發送心跳信息

五、SecondaryNameNode

  1. SecondaryNameNode只是輔助NameNode進行元數據的合併
  2. SecondaryNameNode能起到一定的備份作用,但是不能做到和NameNode之間進行實時熱備 - 在實際開發中,一旦利用到SecondaryNameNode進行了備份,往往意味着數據已經產生了丟失
  3. 在HDFS中,最核心節點一定是NameNode,也因此在Hadoop2.0的完全分佈式中,爲了做到NameNode的熱備,捨棄了SecondaryNameNode

六、複本放置策略

  1. 在HDFS中,默認是多複本策略,默認複本數量爲3
  1. 複本放置策略:
    1. 第一個複本:如果是外部客戶端上傳數據,則此時NameNode會選擇一個相對空閒的節點存放第一個複本;如果是內部上傳,則第一個複本放在本節點上
    2. 第二個複本:在Hadoop2.7以前,第二個複本要放在和第一個複本不同機架的節點上;從Hadoop2.7開始,第二個複本放在和第一個複本相同機架的節點上
    3. 第三個複本:在Hadoop2.7以前,第三個複本是放在和第二個複本相同機架的節點上;從Hadoop2.7開始,第三個複本放在和第二個複本不同機架的節點上
    4. 更多複本:隨機挑選空閒節點存放

七、機架感知策略

  1. 在Hadoop所指的機架並不是物理結構而是邏輯結構
  2. 可以通過映射關係來指定節點對應的機架,也就意味着同一個物理機架上的節點可以映射到不同的邏輯機架上
  3. 實際使用中,一般會將一個或者幾個物理機架上的節點放在一個邏輯機架上

八.特點

  1. 能夠存儲超大文件 - 切塊
  2. 快速的應對和檢測故障 - 心跳
  3. 保證數據的高可靠 - 複本
  4. 簡易的一致性模型 - 一次寫入多次讀取,在Hadoop2.0開始,允許追加
  5. 能夠利用低廉的設備來進行橫向擴展
  6. 不建議存儲大量小文件
  7. 不支持低延遲訪問
  8. 不支持事務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章