欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hadoop3.2.0 HDFS Federation

程序员文章站 2022-07-14 15:18:07
...

本指南概述了HDFS联邦功能以及如何配置和管理联邦群集。

背景

Hadoop3.2.0 HDFS Federation

HDFS有两个主要层:

  • Namespace
    • 由目录,文件和块组成。
    • 它支持所有与命名空间相关的文件系统操作,例如创建,删除,修改和列出文件和目录。
  • Block Storage Service,包括两部分:
    • 块管理(在Namenode中执行)
      • 通过处理注册和定期心跳来提供Datanode集群成员资格。
      • 进程阻止报告并维护块的位置。
      • 支持块相关操作,如创建,删除,修改和获取块位置。
      • 管理副本放置,阻止复制下的块的复制,并删除过度复制的块。
    • 存储 - 由Datanodes通过在本地文件系统上存储块并允许读/写访问来提供。

    先前的HDFS架构仅允许整个群集使用单个命名空间。在该配置中,单个Namenode管理命名空间。HDFS Federation通过向HDFS添加对多个 Namenodes /namespaces 的支持来解决此限制。

多个名称节点/命名空间

为了横向扩展名称服务,联合使用多个独立的Namenodes /namespaces 。Namenodes是联合的; Namenodes是独立的,不需要相互协调。Datanode用作所有Namenode的块的公共存储。每个Datanode都注册集群中的所有Namenode。Datanodes定期发送心跳和阻止报告。它们还处理来自Namenodes的命令。

用户可以使用ViewF来创建个性化命名空间视图。ViewFs类似于某些Unix / Linux系统中的客户端安装表。

Hadoop3.2.0 HDFS Federation

 

HDFS Federation是解决NameNode单点问题的水平横向扩展方案.

 

Block Pool

Block Pool是属于单个命名空间的一组块。Datanodes存储集群中所有块池的块。每个Block Pool都是独立管理的。这允许命名空间为新块生成块ID,而无需与其他命名空间协调。Namenode失败不会阻止Datanode为群集中的其他Namenode提供服务。

命名空间及其块池一起称为命名空间卷。它是一个独立的管理单位。删除 Namenode/namespace 时,将删除Datanodes上的相应块池。在群集升级期间,每个命名空间卷都作为一个单元升级。

ClusterID

ClusterID 标识用于识别该集群中的所有节点。格式化Namenode时,将提供或自动生成此标识符。此ID应用于将其他Namenode格式化为群集。

主要优点

  • 命名空间可伸缩性 - Federation添加命名空间水平扩展。通过允许将更多Namenode添加到群集中,使用大量小文件的大型部署或部署可从命名空间扩展中受益。
  • 性能 - 文件系统吞吐量不受单个Namenode的限制。向集群添加更多名称节点可扩展文件系统读/写吞吐量。
  • 隔离 - 单个Namenode在多用户环境中不提供隔离。例如,实验应用程序可能会使Namenode过载并减慢生产关键应用程序的速度。通过使用多个Namenode,可以将不同类别的应用程序和用户隔离到不同的名称空间。

Federation配置

联合配置是向后兼容的,允许现有的单个Namenode配置无需任何更改即可工作。新配置的设计使得群集中的所有节点具有相同的配置,而无需根据群集中节点的类型部署不同的配置。

Federation添加了一个新的NameServiceID抽象。Namenode及其对应的  secondary/backup/checkpointer 节点都属于NameServiceId。为了支持单个配置文件,Namenode和  secondary/backup/checkpointer 配置参数以NameServiceID为后缀。

配置

步骤1:将dfs.nameservices参数添加到配置中,并使用逗号分隔的NameServiceID列表对其进行配置。Datanodes将使用它来确定集群中的Namenodes。

步骤2:对于每个Namenode和Secondary Namenode / BackupNode / Checkpointer,将以下配置参数后缀为相应的NameServiceID添加到公共配置文件中:

守护进程 配置参数
Namenode dfs.namenode.rpc-address dfs.namenode.servicerpc-address dfs.namenode.http-address dfs.namenode.https-address dfs.namenode.keytab.file dfs.namenode.name.dir dfs.namenode.edits.dir dfs .namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir
Secondary Namenode dfs.namenode.secondary.http-address dfs.secondary.namenode.keytab.file
BackupNode dfs.namenode.backup.address dfs.secondary.namenode.keytab.file

以下是具有两个Namenode的示例配置:

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>ns1,ns2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1</name>
    <value>nn-host1:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns1</name>
    <value>nn-host1:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address.ns1</name>
    <value>snn-host1:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns2</name>
    <value>nn-host2:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns2</name>
    <value>nn-host2:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address.ns2</name>
    <value>snn-host2:http-port</value>
  </property>

  .... Other common configuration ...
</configuration>

格式化名称节点

步骤1:使用以下命令格式化Namenode:

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]

选择一个唯一的cluster_id,它不会与您环境中的其他群集冲突。如果未提供cluster_id,则会自动生成唯一的cluster_id。

步骤2:使用以下命令格式化其他Namenodes:

[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId <cluster_id>

请注意,步骤2中的cluster_id必须与步骤1中的cluster_id的cluster_id相同。如果它们不同,则其他Namenodes将不是联合群集的一部分。

从旧版本升级并配置联合

旧版本仅支持单个Namenode。将群集升级到较新版本以启用联盟在升级期间,您可以按如下方式提供ClusterID:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade -clusterId <cluster_ID>

如果未提供cluster_id,则会自动生成。

将新Namenode添加到现有HDFS集群

执行以下步骤:

  • 将dfs.nameservices添加到配置中。

  • 使用NameServiceID后缀更新配置。版本0.20后配置**名称已更改。必须使用新的配置参数名称才能使用联合。

  • 将新的Namenode相关配置添加到配置文件中。

  • 将配置文件传播到集群中的所有节点。

  • 启动新的Namenode和Secondary / Backup。

  • 刷新Datanodes以通过对集群中的所有Datanode运行以下命令来拾取新添加的Namenode:

    [hdfs]$ $HADOOP_HOME/bin/hdfs dfsadmin -refreshNamenodes <datanode_host_name>:<datanode_rpc_port>

管理集群

启动和停止集群

要启动集群,请运行以下命令:

[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh

要停止群集,请运行以下命令:

[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh

可以从HDFS配置可用的任何节点运行这些命令。该命令使用配置确定集群中的Namenode,然后在这些节点上启动Namenode进程。Datanode在workers文件中指定的节点上启动。该脚本可用作构建自己的脚本以启动和停止集群的参考。

平衡器

Balancer已更改为使用多个Namenodes。可以使用以下命令运行Balancer:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start balancer [-policy <policy>]

policy参数可以是以下任何一项:

  • datanode - 这是默认策略。这平衡了Datanode级别的存储。这类似于平衡先前版本的策略。

  • blockpool - 这可以平衡块池级别的存储,这也可以在Datanode级别进行平衡。

请注意,Balancer仅平衡数据并且不平衡命名空间。有关完整的命令用法,请参阅balancer

退役

退役与先前版本类似。需要解除的节点将添加到所有Namenode的排除文件中。每个Namenode都会停用其Block Pool。当所有Namenode完成退役Datanode时,Datanode被视为退役。

步骤1:要将排除文件分发到所有Namenode,请使用以下命令:

[hdfs]$ $HADOOP_HOME/sbin/distribute-exclude.sh <exclude_file>

步骤2:刷新所有Namenodes以获取新的排除文件:

[hdfs]$ $HADOOP_HOME/sbin/refresh-namenodes.sh

上面的命令使用HDFS配置来确定群集中已配置的Namenodes,并刷新它们以获取新的排除文件。

群集Web控制台

与Namenode状态网页类似,使用联合时,可以使用Cluster Web Console在http:// <any_nn_host:port> /dfsclusterhealth.jsp监视联合群集。群集中的任何Namenode都可用于访问此网页。

Cluster Web Console提供以下信息:

  • 一个群集摘要,显示整个群集的文件数,块数,总配置存储容量以及可用和已用存储。

  • Namenode列表和摘要,包括每个Namenode的文件,块,丢失块以及实时和死数据节点的数量。它还提供了访问每个Namenode的Web UI的链接。

  • Datanodes的退役状态。

 

 

 

 

原文链接: https://hadoop.apache.org/docs/r3.2.0/