Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

本指南概述了HDFS联合身份验证功能以及如何配置和管理联合群集。

背景

HDFS层

HDFS有两个主要层:

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

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

多个名称节点/名称空间

为了水平扩展名称服务,联合会使用多个独立的Namenodes /命名空间。名称节点是联合的;Namenode是独立的,不需要相互协调。数据节点被所有名称节点用作块的公共存储。每个Datanode向集群中的所有Namenode注册。数据节点定期发送心跳并阻止报告。他们还处理来自Namenodes的命令。

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

HDFS联合架构

区块池

块池是一组属于单个名称空间的块。数据节点存储集群中所有块池的块。每个块池都是独立管理的。这允许命名空间为新块生成块ID,而无需与其他命名空间进行协调。Namenode故障不会阻止Datanode服务群集中的其他Namenode。

命名空间及其块池一起称为“命名空间卷”。它是一个独立的管理部门。删除名称节点/名称空间后,将删除数据节点上的相应块池。在群集升级期间,每个名称空间卷都作为一个单元升级。

集群ID

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

主要好处

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

联盟配置

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

联合会添加新的NameServiceID抽象。Namenode及其对应的辅助/备份/检查指针节点均属于NameServiceId。为了支持单个配置文件,Namenode和secondary / backup / checkpointer配置参数以NameServiceID为后缀。

组态:

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

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

守护进程 配置参数
命名节点 dfs.namenode.rpc地址 dfs.namenode.servicerpc地址 dfs.namenode.http地址 dfs.namenode.https地址 dfs.namenode.keytab.file dfs.namenode.name.dir dfs.namenode.edits.dir dfs .namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir
次要名称节点 dfs.namenode.secondary.http地址 dfs.secondary.namenode.keytab.file
备份节点 dfs.namenode.backup.address dfs.secondary.namenode.keytab.file

这是带有两个Namenodes的示例配置:

<配置>
  <属性>
    <name> dfs.nameservices </ name>
    <value> ns1,ns2 </ value>
  </ property>
  <属性>
    <name> dfs.namenode.rpc-address.ns1 </ name>
    <value> nn-host1:rpc-port </ value>
  </ property>
  <属性>
    <name> dfs.namenode.http-address.ns1 </ name>
    <value> nn-host1:http端口</ value>
  </ property>
  <属性>
    <name> dfs.namenode.secondary.http-address.ns1 </ name>
    <value> snn-host1:http端口</ value>
  </ property>
  <属性>
    <name> dfs.namenode.rpc-address.ns2 </ name>
    <value> nn-host2:rpc-port </ value>
  </ property>
  <属性>
    <name> dfs.namenode.http-address.ns2 </ name>
    <value> nn-host2:http端口</ value>
  </ property>
  <属性>
    <name> dfs.namenode.secondary.http-address.ns2 </ name>
    <value> snn-host2:http端口</ value>
  </ property>

  ....其他常见配置...
</ configuration>

格式化名称节点

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

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

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

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

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

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

从较旧的版本升级并配置联盟

较早的版本仅支持单个Namenode。将集群升级到较新版本以启用联盟,在升级过程中,您可以按以下方式提供ClusterID:

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动名称节点-upgrade -clusterId <cluster_ID>

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

向现有的HDFS集群添加新的Namenode

执行以下步骤:

  • dfs.nameservices添加到配置中。

  • 使用NameServiceID后缀更新配置。在发布0.20之后,配置密钥名称已更改。您必须使用新的配置参数名称才能使用联合身份验证。

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

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

  • 启动新的Namenode和Secondary / Backup。

  • 通过对集群中的所有数据节点运行以下命令,刷新数据节点以拾取新添加的名称节点:

    [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进程。数据节点在worker文件中指定的节点上启动。该脚本可用作构建您自己的脚本以启动和停止集群的参考。

平衡器

平衡器已更改为可与多个Namenodes一起使用。可以使用以下命令运行Balancer:

[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动平衡器[-policy <policy>]

策略参数可以是以下任意一个:

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

  • blockpool -这个余额存储在块池级别也平衡在Datanode的水平。

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

退役

退役与先前版本相似。需要停用的节点将添加到所有Namenode的排除文件中。每个Namenode停用其块池。当所有Namenode都停止使用Datanode时,该Datanode被视为已停止使用。

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

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

第2步:刷新所有Namenode以拾取新的排除文件:

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

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

群集Web控制台

与Namenode状态网页相似,使用联合身份验证时,可通过http:// <any_nn_host:port> /dfsclusterhealth.jsp使用群集Web控制台监视联合群集。群集中的任何Namenode均可用于访问此网页。

群集Web控制台提供以下信息:

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

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

  • 数据节点的退役状态。