Hadoop3.2.0 HDFS Federation

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

背景

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系统中的客户端安装表。

 

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添加到公共配置文件中:

守护进程配置参数
Namenodedfs.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 Namenodedfs.namenode.secondary.http-address dfs.secondary.namenode.keytab.file
BackupNodedfs.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/

©️2020 CSDN 皮肤主题: 鲸 设计师:meimeiellie 返回首页