3.17-3.18 HDFS2.x中高级特性讲解
一、hdfs federation
hdfs federation即hdfs的聯邦;可以理解為有多個namenode節點的hdfs集群;
HA方案解決的是單點故障問題,而Fdederation解決的是單命名空間問題。
集群的全部元數據都存放在一個名稱節點上,當集群足夠大的時候,這個名稱節點就成了性能的瓶頸。
而且這種設計不能進行 的隔離,用戶的所有操作都必須由這一個節點來處理。
HDFS Federation就是使HDFS支持多個命名空間,并且允許在HDFS中同時存在多個NameNode。
HDFS Federation的構架如上,其使用了多個獨立的NameNode/NameSpace,從而使HDFS的命名服務器能水平擴張。
?
各個名稱節點之間是聯合的,即他們相互獨立且不需要相互協調,各自分工,管理好自己的區域。
分布式的DataNode對聯合的NameNode來說是通用的數據塊存儲設備。每個數據節點要向所有的名稱節點注冊,
并且周期性發送心跳和塊信息報告,同時處理來自所有NameNode的指令。
?
只有一個名稱節點的HDFS只有一個命名空間,它使用全部的塊,而Federation中有多個獨立的命名空間,每個命名空間使用一個塊池(block pool)。
?
塊池就是屬于單個命名空間的一組塊。每一個datanode為所有的block pool的存儲塊。dataNode是一個物理概念而block pool是一個重新將塊劃分的邏輯概念。
同個dataNode中可以存著屬于多個block pool的多個塊。block pool允許一個命名空間在不通知其它命名空間的情況下為一個新的block創建Block ID,
同時,一個nameNode的失效不會影響其下的dataNode為其它nameNode服務。
?
當datanode與Namenode建立聯系并開始會話后自動建立Block pool。每個block都有一個唯一的標識,這個標識我們稱之為擴展的塊ID(Extended Block ID)= BlockID+BlockID。
這個擴展的塊ID在HDFS集群之間都是唯一的,這為以后集群歸并創造了條件。
?
Datanode中的數據結構都通過塊池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通過BPID索引。
?
在HDFS中,所有的更新、回滾都是以Namenode和BlockPool為單元發生的。即同一HDFS Federation中不同的Namenode/BlockPool之間沒有什么關系。
?
需要注意的是,HDFS Federation并不能解決單點故障問題。也就是說,每個名稱節點仍然可能存在單點故障,節點間是聯盟關系而非互為備份。
因此,我們還是需要為每個節點設置ha機制。
?
多命名空間的管理用的是一種叫client side mount table的方法。
如下面的圖所示,白色大三角形是客戶端所看到的,黑色三角形是各個子命名空間。用戶可以通過訪問不同掛載點來訪問不同空間。
?
二、File System Snapshots
HDFS快照是一個只讀的基于時間點文件系統拷貝。快照可以是整個文件系統的也可以是一部分。常用來作為數據備份,防止用戶錯誤和容災快照功能。HDFS實現功能:|>Snapshot創建的時間復雜度為O(1),但是不包括Node的尋找時間>只有當修改SnapShot時,才會有額外的內存占用,內存使用量為0(V).M為修改的文件或者目錄數>在DataNode上面的blocks不會復制,做Snapshot的文件是紀錄了block的列表和文件的大小,但是沒有數據的復制>Snapshot并不會影響HDFS的正常操作:修改會按照時間的反序記錄,這樣可以直接讀取到最新的數據。快照數據是當前數據減去修改的部分計算出來的。相關命令:
設置一個目錄為可快照bin/hdfs dfsadmin-allowSnapshot <path>取消目錄可快照bin/hdfs dfsadmin-disallowSnapshot <path>生成快照bin/hdfs dfs-createSnapshot <path>[<snapshotName>]刪除快照bin/hdfs dfs-deleteSnapshot <path><snapshotName>列出所有可快照目錄bin/hdfs IsSnapshottableDir比較快照之間的差異bin/hdfs snapshotDiff <path><fromSnapshot><toSnapshot>?
三、集中式緩存管理
Hadoop從2.3.0版本開始支持HDFS緩存機制,HDFS允許用戶將一部分目錄或文件緩存在HDFS當中, NameNode會通知擁有對應塊的DataNodes將其緩存在DataNode的內存當中。優勢>防止那些被頻繁使用的數據從內存中清除;>因為DataNode的緩存由NameNode來管理,applications在做任務安排時可以查詢這個緩存的列表,使用一個被緩存的塊副本能夠提高讀性能;>當塊被DataNode緩存之后,客戶端可以使用一個新的、高效的、zero-copy的讀API,因為緩存中的數據已經被計算過checksum,當使用新APl時,客戶端基本上是零開銷的;>可以提高集群的內存利用率。當使用操作系統的緩存時,對一個塊的重復讀會導致所有的副本都會被放到緩沖區當中,當使用集中式緩存時,用戶可以指定n個副本中的m個才會被緩存,可以節約n-m的內存;使用場景>集中式緩存對那些頻察訪問的的文件是非常有用的,例如hive中經常被使用的fact表就非常適合緩有;>另一方面,緩存一年的查詢結果可能沒那么有用了,因為這個結果可能只會被查看一次;>有助于提高混合類型作業的SLA性能,把高優先級的數據緩存起來可以確保它不會與低優先級的數據競爭磁盤IO;?
四、Distributed Copy
1、DistCP
Distributed Copy:分布式copy
比如有多個hadoop集群(如:正式版、測試版),可以用此功能來跨集群copy數據;
#用法 bash$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo?
2、HFTP
但是當集群版本不一致的時候,用dictcp可能就會出問題;
此時可以用HFTP;底層為MapReduce
但是官網提示:HFTP和HSFTP在2.x中已棄用,并且在3.0中不可用。它們已被WebHDFS取代。
webHDFS: http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/WebHDFS.html
?
介紹 HFTP是一種Hadoop文件系統實現,允許您從遠程Hadoop HDFS集群讀取數據。讀取通過HTTP完成,數據來自DataNodes。 HFTP是一個只讀文件系統,如果您嘗試使用它來寫入數據或修改文件系統狀態,它將拋出異常。如果您有多個具有不同版本的HDFS群集,并且您需要將數據從一個移動到另一個,則HFTP主要非常有用。 即使在不同版本的HDFS之間,HFTP也是線路兼容的。例如,您可以執行以下操作: hadoop distcp -i hftp://sourceFS:50070/src hdfs://destFS:8020/dest 請注意,HFTP是只讀的,因此目標必須是HDFS文件系統。(此外,在此示例中,應使用新文件系統的配置來運行distcp。)擴展名HSFTP默認使用HTTPS。這意味著數據將在傳輸過程中加密。轉載于:https://www.cnblogs.com/weiyiming007/p/10728977.html
總結
以上是生活随笔為你收集整理的3.17-3.18 HDFS2.x中高级特性讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用FindAncestor查找方式绑定
- 下一篇: loj.ac:#10024. 「一本通