Hadoop中的HDFS联合是什么
这篇文章展示了什么是Hadoop框架中的HDFS联合(HDFS Federation),以及设置HDFS联合需要进行哪些配置更改。
HDFS体系结构问题
在Hadoop群集中,名称空间管理和块管理均由Namenode完成。因此,基本上,Namenode必须执行以下任务:
1名称空间管理
- 保留文件元数据。
- 支持所有与名称空间相关的文件系统操作,例如创建,删除,修改和列出文件和目录。
2块管理
- 通过处理注册和定期心跳来管理集群中的Datanode。
- 处理块报告并维护块的位置。
- 支持与块相关的操作,例如创建,删除,修改和获取块位置。
- 管理副本放置,针对未完全复制的块进行块复制,并删除过度复制的块。
由于现有的HDFS架构仅允许整个集群使用单个名称空间,而单个Namenode管理名称空间,因此在大型集群中,此架构可能会在Namenode扩展方面造成问题。
Hadoop 2.x发行版中引入的HDFS联盟通过向HDFS添加对多个Namenodes / namespace的支持来解决此限制。
HDFS联合中的多个Namenode /命名空间
HDFS联合会使用多个独立的Namenode,其中每个Namenode管理名称空间的一部分,这有助于水平扩展名称服务。
例如,假设有两个名称空间卷/ user和/ data。然后在HDFS联盟下,可以有两个Namenode,一个Namenode管理/ user下的文件,另一个Namenode管理/ data下的文件。
这些Namenode是联合的; Namenode是独立的,不需要相互协调。
命名空间卷
在HDFS联盟中,名称节点管理名称空间卷,其中,名称空间卷由-
由Namenode管理的名称空间的1Metadata。
2A块池,其中包含该名称空间中存储的所有文件的块。
数据节点仍然为集群中的所有块池存储块,因此每个数据节点都向集群中的所有Namenode注册。
每个块池都由一个Namenode独立管理,因此不需要与其他Namenode管理的其他命名空间进行协调。
由于多个Namenode之间没有相互通信,并且Datanode与所有Namenode通信,因此一个Namenode的故障不会阻止Datanode为群集中的其他Namenode服务。
如果我们以两个名称空间卷/ user和/ data以及两个管理这两个名称空间的Namenodes为例,那么下图显示了HDFS联合架构,
Hadoop for HDFS联合中的配置更改
如果使用的是HDFS联合,则使用客户端安装表来安装名称空间卷。客户端应用程序将使用这些客户端安装表来执行文件路径到Namenode的映射。为了配置它,使用了ViewFs文件系统。在每个集群的配置中,将默认文件系统设置为该集群的装入表,该更改在core-site.xml中完成–
<property> <name>fs.defaultFS</name> <value>viewfs://clusterX</value> </property>
URI中的viewfs://方案之后的权限是装入表名称。建议使用集群名称来命名集群的安装表。然后,Hadoop系统将在Hadoop配置文件中查找名称为" clusterX"的装载表。
同样在hdfs-site.xml中,我们需要配置dfs.nameservices属性,该属性为此新的nameservice提供逻辑名称。使用逗号分隔的NameServiceID列表配置此属性。 Datanode将使用它来确定集群中的Namenode。我们可以为此名称服务选择一个逻辑名称,例如mycluster1,mycluster2.
<property> <name>dfs.nameservices</name> <value>mycluster1, mycluster2</value> </property>
然后,将为每个Namenode和Secondary Namenode / BackupNode / Checkpointer的配置参数添加相应的NameServiceID作为后缀。
例如-在带有NameServiceID后缀的dfs.namenode.http-address属性
将成为dfs.namenode.http-address.mycluster1
带NameServiceID后缀的属性dfs.namenode.secondary.http-address将变为-dfs.namenode.secondary.http-address.mycluster2