干货:如何将Hadoop存储容量提升4倍?

大数据 Hadoop
本文主要介绍如何通过Federation使用多个独立的Namenodes/Namespaces水平扩展命名空间。Namenodes彼此独立,互不通信,可以共享相同的Datanode存储。

在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。

  1. 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。

  1. <property>  
  2. <name>dfs.nameservices</name 
  3. <value>ns1,ns2</value>  
  4. </property> 

3.2 NAMENODEIDS

对于具有HA设置的Nameservice,我们需要为属于该Nameservice的Namenode指定NamenodeID。这是通过将NamenodeID列表添加到与名称服务ID一起使用的密钥dfs.ha.namenodessuffixed中来完成的。

  1. <property>  
  2.   <name>dfs.ha.namenodes.ns1</name 
  3.   <value>nn1,nn2</value></property>
  4.  
  5. <property>  
  6.   <name>dfs.ha.namenodes.ns2</name 
  7.   <value>nn3,nn4</value>  
  8.   </property> 

3.3 RPC ADDRESSES

应使用配置密钥为集群中的每个Namenode配置RPC和Service-RPC地址 - dfs.namenode.rpc-address和dfs.namenode.servicerpc-address(可选)。这是通过使用NameserviceID和NamenodeID为config键添加后缀来完成的。

  1. <property>  
  2.   <name>dfs.namenode.rpc-address.ns1.nn1</name 
  3.   <value>node-1.example.com:8020</value>  
  4.   </property> 
  5.  
  6.   <property>  
  7.   <name>dfs.namenode.servicerpc-address.ns1.nn1</name 
  8.   <value>node-1.example.com:8040</value>  
  9.   </property> 
  10.  
  11.   <property>  
  12.   <name>dfs.namenode.rpc-address.ns1.nn2</name 
  13.   <value>node-2.example.com:8020</value>  
  14.   </property> 
  15.  
  16.   <property>  
  17.   <name>dfs.namenode.servicerpc-address.ns1.nn2</name 
  18.   <value>node-2.example.com:8040</value> 
  19.    </property> 
  20.  
  21.   <property>  
  22.   <name>dfs.namenode.rpc-address.ns2.nn3</name 
  23.   <value>node-3.example.com:8020</value>  
  24.   </property> 
  25.  
  26.   <property>  
  27.   <name>dfs.namenode.servicerpc-address.ns2.nn3</name 
  28.   <value>node-3.example.com:8040</value>  
  29.   </property> 
  30.  
  31.   <property>  
  32.   <name>dfs.namenode.rpc-address.ns2.nn4</name 
  33.   <value>node-4.example.com:8020</value>  
  34.   </property> 
  35.  
  36.   <property>  
  37.   <name>dfs.namenode.servicerpc-address.ns2.nn4</name 
  38.   <value>node-4.example.com:8040</value>  
  39.   </property> 

3.4 HTTP地址

HTTP和HTTPS地址(dfs.namenode.http-address和dfs.namenode.https-address)是可选参数,可以配置为类似于RPC地址。

  1. <property>  
  2.   <name>dfs.namenode.http-address.ns1.nn1</name 
  3.   <value>node-1.example.com:50070</value>  
  4.   </property>  
  5.  
  6.   <property>  
  7.   <name>dfs.namenode.https-address.ns1.nn1</name 
  8.   <value>node-1.example.com:50072</value>  
  9.   </property>  
  10.  
  11.   <property>  
  12.   <name>dfs.namenode.http-address.ns1.nn2</name 
  13.   <value>node-2.example.com:50070</value>  
  14.   </property> 
  15.  
  16.   <property>  
  17.   <name>dfs.namenode.https-address.ns1.nn2</name 
  18.   <value>node-2.example.com:50072</value>  
  19.   </property> 
  20.  
  21.   <property>  
  22.   <name>dfs.namenode.http-address.ns2.nn3</name 
  23.   <value>node-3.example.com:50070</value>  
  24.   </property> 
  25.  
  26.   <property>  
  27.   <name>dfs.namenode.http-address.ns2.nn4</name 
  28.   <value>node-4.example.com:50070</value>  
  29.   </property> 

3.5 其他NAMESERVICE特定密钥

通过使用NameserviceID后缀键名,可以为每个名称服务配置以下键:

  1. dfs.namenode.keytab.file  
  2. dfs.namenode.name.dir  
  3. dfs.namenode.edits.dir  
  4. dfs.namenode.checkpoint.dir 
  5. dfs.namenode.checkpoint.edits.dir  
  6. dfs.secondary.namenode.keytab.file  
  7. dfs.namenode.backup.address 

4.集群设置

federated集群中的所有Namenode应具有相同的clusterID,应使用以下命令格式化一个namenode,选择唯一的clusterID,使其不与环境中的其他集群冲突。如果未提供clusterID,则会自动生成唯一ID。

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

集群中的所有其他名称节点必须使用与第一个namenode相同的clusterID进行格式化。

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

如果向现有集群添加新名称服务,则应使用与现有名称节点相同的clusterID格式化新名称节点,可以从Namenode中的VERSION文件检索clusterID。

责任编辑:未丽燕 来源: it168网站
相关推荐

2020-08-20 09:30:17

芯片半导体技术

2017-07-04 08:28:47

存储容量操作

2017-05-11 11:30:43

MySQL查询速度

2013-05-24 09:16:09

微软Windows Azu云服务

2009-02-11 15:35:28

存储容量优化SCO重复数据删除

2021-01-18 05:15:30

存储容量服务器

2013-03-07 10:12:50

云存储移动设备存储

2009-07-28 19:08:59

云计算存储刀片服务器

2015-08-20 13:52:53

数据中心储容量机械硬盘

2019-12-13 16:03:26

戴尔

2017-05-10 16:09:12

MySQL数据库查询

2009-01-14 17:51:05

存储虚拟化NetApp

2018-10-09 14:16:21

Hadoop数据移入数据传输

2015-11-04 10:10:29

OneDrive免费云存储

2020-09-28 06:50:58

微信支付宝移动应用

2022-03-21 17:27:46

戴尔

2020-02-28 09:26:54

PythonGo语言C语言

2018-03-19 11:13:49

数据存储容量

2017-02-05 17:22:16

存储光存储DVD
点赞
收藏

51CTO技术栈公众号