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

栏目: 服务器 · 发布时间: 6年前

内容简介:在Hadoop 1.0中,HDFS的单NameNode设计带来诸多问题,包括单点故障、内存受限制约集群扩展性和缺乏隔离机制(不同业务使用同一个NameNode导致业务相互影响)等。为了解决这些问题,Hadoop 2.0就引入了基于共享存储的HA解决方案和HDFS Federation,HDFS Federation是指HDFS集群可同时存在多个NameNode,这些NameNode分别管理一部分数据,且共享所有DataNode存储资源。Apache Hadoop分布式文件系统(HDFS)具有高度可扩展性,

在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’分区下的数据。

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

如果想在NS2中存储1990年的记录,我们必须改变表格以将其位置设置为NS2。

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

将表的位置更改为新命名空间NS2之后,我们可以将数据插入到所需的分区中,现在将在NS2中创建分区。

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

我们可以在同一个查询中执行跨越不同命名空间的多个分区操作。例如,表上的“SELECT *”将从不同命名空间的分区返回记录。

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

下图显示了在nameservice NS1(在node-1上运行的namenode)中存储的2007和2018年的hive分区数据。

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

1990年的归档数据存储在NS2中(namenode在node-3上运行),如下所示:

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

1.2 应用程序隔离

假设我们需要运行一个较庞大的应用程序,它可能会占用Namenode上的大量资源,这很可能导致其他应用程序延迟。通过federation,我们可以将这些应用程序移动到不同的命名空间。

2. AMBARI概述

Ambari中的federated集群视图如下所示,这两个服务将各自具有相应的组件和度量信息。其他组件(如Datanodes和Journalnodes)将由这两个服务共享。 如下所述,启用federated所需的所有配置更改都由Ambari自动完成。

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

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 ] 

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms of the Intelligent Web

Algorithms of the Intelligent Web

Haralambos Marmanis、Dmitry Babenko / Manning Publications / 2009-7-8 / GBP 28.99

Web 2.0 applications provide a rich user experience, but the parts you can't see are just as important-and impressive. They use powerful techniques to process information intelligently and offer featu......一起来看看 《Algorithms of the Intelligent Web》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具