乾貨:如何通過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’分割槽下的資料。
如果想在NS2中儲存1990年的記錄,我們必須改變表格以將其位置設定為NS2。
hive> ALTER TABLE Students SET LOCATION ‘hdfs://ns2/user/hive/warehouse/student’;
將表的位置更改為新名稱空間NS2之後,我們可以將資料插入到所需的分割槽中,現在將在NS2中建立分割槽。
我們可以在同一個查詢中執行跨越不同名稱空間的多個分割槽操作。例如,表上的“SELECT *”將從不同名稱空間的分割槽返回記錄。
下圖顯示了在nameservice NS1(在node-1上執行的namenode)中儲存的2007和2018年的hive分割槽資料。
1990年的歸檔資料儲存在NS2中(namenode在node-3上執行),如下所示:
1.2 應用程式隔離
假設我們需要執行一個較龐大的應用程式,它可能會佔用Namenode上的大量資源,這很可能導致其他應用程式延遲。通過federation,我們可以將這些應用程式移動到不同的名稱空間。
2. AMBARI概述
Ambari中的federated叢集檢視如下所示,這兩個服務將各自具有相應的元件和度量資訊。其他元件(如Datanodes和Journalnodes)將由這兩個服務共享。 如下所述,啟用federated所需的所有配置更改都由Ambari自動完成。
3.配置更改
要啟用federated並在叢集中具有多個名稱空間,需要在hdfs-site.xml中進行一些配置更改。 如果使用Ambari安裝federated叢集,則會自動設定以下配置。但是,學會如何通過頁面配置federated是有幫助的,以下是具有兩個Nameservices叢集的示例- NS1和NS2。
3.1 NAMESERVICEIDS
使用逗號分隔的NameserviceID列表將此配置新增到hdfs-site.xml。
<property> <name>dfs.nameservices</name> <value>ns1,ns2</value> </property>
3.2 NAMENODEIDS
對於具有HA設定的Nameservice,我們需要為屬於該Nameservice的Namenode指定NamenodeID。這是通過將NamenodeID列表新增到與名稱服務ID一起使用的金鑰dfs.ha.namenodessuffixed中來完成的。
<property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value></property><property> <name>dfs.ha.namenodes.ns2</name> <value>nn3,nn4</value> </property>
3.3 RPC ADDRESSES
應使用配置金鑰為叢集中的每個Namenode配置RPC和Service-RPC地址 - dfs.namenode.rpc-address和dfs.namenode.servicerpc-address(可選)。這是通過使用NameserviceID和NamenodeID為config鍵新增字尾來完成的。
<property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>node-1.example.com:8020</value> </property> <property> <name>dfs.namenode.servicerpc-address.ns1.nn1</name> <value>node-1.example.com:8040</value> </property> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>node-2.example.com:8020</value> </property> <property> <name>dfs.namenode.servicerpc-address.ns1.nn2</name> <value>node-2.example.com:8040</value> </property> <property> <name>dfs.namenode.rpc-address.ns2.nn3</name> <value>node-3.example.com:8020</value> </property> <property> <name>dfs.namenode.servicerpc-address.ns2.nn3</name> <value>node-3.example.com:8040</value> </property> <property> <name>dfs.namenode.rpc-address.ns2.nn4</name> <value>node-4.example.com:8020</value> </property> <property> <name>dfs.namenode.servicerpc-address.ns2.nn4</name> <value>node-4.example.com:8040</value> </property> |
3.4 HTTP地址
HTTP和HTTPS地址(dfs.namenode.http-address和dfs.namenode.https-address)是可選引數,可以配置為類似於RPC地址。
<property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>node-1.example.com:50070</value> </property> <property> <name>dfs.namenode.https-address.ns1.nn1</name> <value>node-1.example.com:50072</value> </property> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>node-2.example.com:50070</value> </property> <property> <name>dfs.namenode.https-address.ns1.nn2</name> <value>node-2.example.com:50072</value> </property> <property> <name>dfs.namenode.http-address.ns2.nn3</name> <value>node-3.example.com:50070</value> </property> <property> <name>dfs.namenode.http-address.ns2.nn4</name> <value>node-4.example.com:50070</value> </property> |
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 <clusterID>]
叢集中的所有其他名稱節點必須使用與第一個namenode相同的clusterID進行格式化。
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId <clusterID>
如果向現有叢集新增新名稱服務,則應使用與現有名稱節點相同的clusterID格式化新名稱節點,可以從Namenode中的VERSION檔案檢索clusterID。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2168504/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- 2、儲存容量和儲存地址空間的轉換
- 華為雲學院乾貨:物件儲存服務:便捷管理儲存資源物件
- Elasticsearch 儲存成本省 60%,稿定科技乾貨分享Elasticsearch
- 如何通過J2Cache實現分散式session儲存分散式Session
- mysql如何呼叫儲存過程MySql儲存過程
- 如何自動擴充套件K8S儲存池容量?套件K8S
- 如何將MAC的檔案儲存至NAS網路儲存?Mac
- hadoop異構儲存+lucene索引Hadoop索引
- 知識乾貨:基礎儲存服務新手體驗營
- 儲存容量及相關計算單位
- 【知識分享】計算機“儲存容量”、“速率”計算機
- Hadoop將過時了?Hadoop
- vertica 如何實現儲存過程?儲存過程
- 通過 POI 將資料庫中的資料上傳至 OSS 物件儲存資料庫物件
- 如何將網頁儲存成mhtml格式網頁HTML
- 通過MySQL儲存原理來分析排序和鎖MySql排序
- 乾貨分享 | 阿里專家親授如何提升研發效能阿里
- 儲存過程與儲存函式儲存過程儲存函式
- 技術乾貨:Hadoop面試題及答案Hadoop面試題
- MySQL儲存過程中如何使用ROLLBACKMySql儲存過程
- 如何提升大容量檔案上傳效能
- React通過redux-persist持久化資料儲存ReactRedux持久化
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- 乾貨 | 資料探勘過關40題,你是否都能通關...
- 中國南方電網深圳供電局等,儲存總容量超過4500PB。
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- Hadoop(三)通過C#/python實現Hadoop MapReduceHadoopC#Python
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- 如何將html程式碼儲存為Pdf檔案HTML
- 如何將AI/ML與物件儲存結合使用AI物件