乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

在Hadoop 1.0中,HDFS的單NameNode設計帶來諸多問題,包括單點故障、內存受限制約集群擴展性和缺乏隔離機制(不同業務使用同一個NameNode導致業務相互影響)等。為了解決這些問題,Hadoop 2.0就引入了基於共享存儲的HA解決方案和HDFS Federation,HDFS Federation是指HDFS集群可同時存在多個NameNode,這些NameNode分別管理一部分數據,且共享所有DataNode存儲資源。

Apache Hadoop分佈式文件系統(HDFS)具有高度可擴展性,可支持PB級群集。但是,整個命名空間(文件系統元數據)存儲在內存中。因此,即使存儲可以水平擴展,命名空間也只能垂直擴展,它受限於單個NameNode進程可存儲的文件、塊和目錄的數量。

本文主要介紹如何通過Federation使用多個獨立的Namenodes/Namespaces水平擴展命名空間。Namenodes彼此獨立,互不通信,可以共享相同的Datanode存儲。Federation和Namespaces可以為整個集群提供可伸縮性,Federation增加了對Namespace水平擴展的支持;添加更多的NameNode,增加集群的聚合讀/寫能力和吞吐量;用戶和應用程序可以通過Namenodes隔離。

1、示例

Federation在可伸縮性、性能和隔離方面的優勢為它創建了許多用例,本文僅列舉一些簡單示例。

1.1 HIVE ON FEDERATION

Hive將表數據組織到分區中以提高查詢性能,它將分區存儲在不同的位置,這為在不同命名空間中存儲、管理和配置hive數據提供了機會。使用federated集群,我們可以將不同的表存儲在不同的命名空間,或者將同一個表的不同分區存儲在不同的命名空間。

例如,我們可以將不經常訪問的數據歸檔存儲到單獨的命名空間,並將當前頻繁使用的數據保存在單獨的命名空間,這將提高服務於當前數據命名空間的性能效率,並減少負載。

假設我們一年有一個分區hive表,我們希望將2000年以後的所有數據存儲在一個命名空間中,將其餘數據存儲在一個命名空間中,這就可以通過federation實現。

下圖顯示了 NSI中Students 表year=‘2018’分區下的數據。

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

如果想在NS2中存儲1990年的記錄,我們必須改變表格以將其位置設置為NS2。

hive> ALTER TABLE Students SET LOCATION ‘hdfs://ns2/user/hive/warehouse/student’;

將表的位置更改為新命名空間NS2之後,我們可以將數據插入到所需的分區中,現在將在NS2中創建分區。

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

我們可以在同一個查詢中執行跨越不同命名空間的多個分區操作。例如,表上的“SELECT *”將從不同命名空間的分區返回記錄。

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

下圖顯示了在nameservice NS1(在node-1上運行的namenode)中存儲的2007和2018年的hive分區數據。

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

1990年的歸檔數據存儲在NS2中(namenode在node-3上運行),如下所示:

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

1.2 應用程序隔離

假設我們需要運行一個較龐大的應用程序,它可能會佔用Namenode上的大量資源,這很可能導致其他應用程序延遲。通過federation,我們可以將這些應用程序移動到不同的命名空間。

2. AMBARI概述

Ambari中的federated集群視圖如下所示,這兩個服務將各自具有相應的組件和度量信息。其他組件(如Datanodes和Journalnodes)將由這兩個服務共享。 如下所述,啟用federated所需的所有配置更改都由Ambari自動完成。

乾貨:如何通過Federation將Hadoop存儲容量提升4倍?

3.配置更改

要啟用federated並在集群中具有多個命名空間,需要在hdfs-site.xml中進行一些配置更改。 如果使用Ambari安裝federated集群,則會自動設置以下配置。但是,學會如何通過頁面配置federated是有幫助的,以下是具有兩個Nameservices集群的示例- NS1和NS2。

3.1 NAMESERVICEIDS

使用逗號分隔的NameserviceID列表將此配置添加到hdfs-site.xml。

dfs.nameservices

ns1,ns2

3.2 NAMENODEIDS

對於具有HA設置的Nameservice,我們需要為屬於該Nameservice的Namenode指定NamenodeID。這是通過將NamenodeID列表添加到與名稱服務ID一起使用的密鑰dfs.ha.namenodessuffixed中來完成的。

dfs.ha.namenodes.ns1

nn1,nn2

dfs.ha.namenodes.ns2

nn3,nn4

3.3 RPC ADDRESSES

應使用配置密鑰為集群中的每個Namenode配置RPC和Service-RPC地址 - dfs.namenode.rpc-address和dfs.namenode.servicerpc-address(可選)。這是通過使用NameserviceID和NamenodeID為config鍵添加後綴來完成的。

dfs.namenode.rpc-address.ns1.nn1

node-1.example.com:8020

dfs.namenode.servicerpc-address.ns1.nn1

node-1.example.com:8040

dfs.namenode.rpc-address.ns1.nn2

node-2.example.com:8020

dfs.namenode.servicerpc-address.ns1.nn2

node-2.example.com:8040

dfs.namenode.rpc-address.ns2.nn3

node-3.example.com:8020

dfs.namenode.servicerpc-address.ns2.nn3

node-3.example.com:8040

dfs.namenode.rpc-address.ns2.nn4

node-4.example.com:8020

dfs.namenode.servicerpc-address.ns2.nn4

node-4.example.com:8040

3.4 HTTP地址

HTTP和HTTPS地址(dfs.namenode.http-address和dfs.namenode.https-address)是可選參數,可以配置為類似於RPC地址。

dfs.namenode.http-address.ns1.nn1

node-1.example.com:50070

dfs.namenode.https-address.ns1.nn1

node-1.example.com:50072

dfs.namenode.http-address.ns1.nn2

node-2.example.com:50070

dfs.namenode.https-address.ns1.nn2

node-2.example.com:50072

dfs.namenode.http-address.ns2.nn3

node-3.example.com:50070

dfs.namenode.http-address.ns2.nn4

node-4.example.com:50070

3.5 其他NAMESERVICE特定密鑰

通過使用NameserviceID後綴鍵名,可以為每個名稱服務配置以下鍵:

·dfs.namenode.keytab.file

·dfs.namenode.name.dir

·dfs.namenode.edits.dir

·dfs.namenode.checkpoint.dir

·dfs.namenode.checkpoint.edits.dir

·dfs.secondary.namenode.keytab.file

·dfs.namenode.backup.address

4.集群設置

federated集群中的所有Namenode應具有相同的clusterID,應使用以下命令格式化一個namenode,選擇唯一的clusterID,使其不與環境中的其他集群衝突。如果未提供clusterID,則會自動生成唯一ID。

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId ]

集群中的所有其他名稱節點必須使用與第一個namenode相同的clusterID進行格式化。

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId

如果向現有集群添加新名稱服務,則應使用與現有名稱節點相同的clusterID格式化新名稱節點,可以從Namenode中的VERSION文件檢索clusterID。

大家多多關注哦,你的關注是我最大的動力,會不定期就有乾貨哦。

想學習大數據的,可以私信我,發你大數據學習資料。


分享到:


相關文章: