hadoop-2.7.4-翻译文档-联邦HDFS

背景

HDFS图层

HDFS有两个主要层:

  • 名字空间
    • 包含目录,文件和块信息。
    • 它支持所有名字空间相关的文件系统操作,如创建,删除,修改和列出文件和目录。
  • 块存储服务有两部分:

    • 块管理(在Namenode中执行)
      • 通过处理注册和周期性心跳信息来提供Datanode集群成员管理服务。
      • 处理块报告并持久存储块的位置信息。
      • 支持块相关操作,如增、删、改、查。
      • 管理块副本的存放,对副本数不足的块进行复制,以及对副本数超量的块进行副本删除。
    • 块存储 - 由Datanodes提供服务,通过在本地文件系统上进行块存储,并提供读/写访问来实现。

    之前的HDFS架构只运行一个NN来对整个集群提供支持。在该配置下,单个NN管理整个名字空间。而联邦HDFS通过向HDFS添加对多个Namenodes/namespaces的支持,解决了此限制。

多个Namenodes/namespaces

为了水平扩展名称服务,联邦模式使用多个独立的Namenodes/namespaces。多个Namenode之间组成了一个联盟,并且各个Namenode之间是独立的,不需要相互协调。Datanodes被所有Namenodes通用,来做块的存储工作。每个Datanode向集群中所有的NameNode发起注册,并向其发送周期性的心跳和块报告,同事还处理Namenodes发来的命令。

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

ViewFS使用参照 http://blog.csdn.net/anyuzun/article/details/78109320 。


HDFS联合体系结构

块池

单个块池是属于单个名字空间的一个组件。Datanodes为集群中所有的块池提供块存储服务。每个块池都是独立管理的。这将允许名字空间为新块生成块ID,并且不需要与其他名字空间协调。集群中单个Namenode故障不会阻止Datanode继续向其他Namenode提供服务。

名字空间及其所属块池统称为名字空间卷。这是一个独立的管理单位。当Namenode或名字空间被删除时,在Datanodes中其相应的块池也被删除。在集群升级期间,每个名字空间卷都将作为单独一个单元进行升级。

集群ID

集群ID用于识别该集群中的所有节点。当一个Namenode被格式化时时,其集群ID被主动提供或自动生成。该ID将用于格式化其他的Namenodes到集群。

主要优点

  • 名字空间的可扩展性 - 联邦模式水平拓展了NameSpace。在集群中通过增加NameNode来水平拓展名字空间,使得大型集群或包含多量小文件的集群得以受益。
  • 性能的提高 - 文件系统的吞吐量不再受单个Namenode限制。向集群添加更多的Namenode大大提高了文件系统的读/写吞吐量。
  • 隔离性 - 单个Namenode并不能在多用户环境中提供隔离。例如,一个实验阶段的应用程序可能会使生产环境的应用程序达到超载。通过使用多个Namenode,可以使得不同类别的应用程序和用户隔离到不同的名字空间中去。

联邦配置

联盟配置向后兼容并允许单个Namenode使用现有的配置继续工作,而无需任何变化。新的配置模式使得集群中的所有节点具有相同的配置,不需要根据集群中的节点类型部署不同而做出改变。

联邦模式添加了一个新的NameServiceID抽象。一个Namenode及其对应的secondary/backup/checkpointer节点都属于同一个NameServiceId。为了支持多个NameNode配置写入到单个配置文件中,Namenode和其附属节点r配置参数均添加NameServiceID作为后缀

配置

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

步骤2:对于每个Namenode和其附属节点的配置信息,以相应的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>

格式化Namenode

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

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

选择一个不会与其他集群发生冲突的cluster_id。如果未提供cluster_id,则会自动生成。

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

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

请注意,步骤2中的cluster_id必须与步骤1中的cluster_id相同。如果它们不同,则附加的Namenode不会成为联邦集群的一部分。

从旧版本升级为联邦集群

较旧的版本只支持单个Namenode。需要将集群升级到较新版本以启用联邦模式,在升级期间,您可以使用如下的ClusterID:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs start namenode --config $HADOOP_CONF_DIR  -upgrade -clusterId <cluster_ID>

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

将新的Namenode添加到现有的HDFS集群

执行以下步骤:

  • dfs.nameservices参数添加到配置文件中。

  • 使用NameServiceID后缀更新配置。配置键名称已更改为0.20发布版本。您必须使用新的配置参数名才能启用联邦模式。

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

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

  • 启动新的Namenode及其附属节点。

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

    [hdfs]$ $HADOOP_PREFIX/bin/hdfs dfsadmin -refreshNameNodes <datanode_host_name>:<datanode_rpc_port>

管理集群

启动和停止集群

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

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

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

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

这些命令可以在拥有HDFS配置文件的任何节点运行。该命令使用配置文件来确定集群中的Namenode节点,然后在这些节点上启动Namenode进程。DataNode则在[slaves]文件中获取节点信息,并在指定的节点上启动该脚本可参考用来构建自己的脚本以启动和停止集群。

平衡器

使用多个NameNode时,平衡器已经发生更改。可以使用以下命令运行平衡器:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start balancer [-policy <policy>]

策略参数可以是以下任一项:

  • datanode - 这是默认策略。这样可以在DataNode级别平衡存储空间。这与以前版本的平衡策略相似。

  • blockpool -这将在块池级别平衡存储空间,同时也对Datanode级别的存储空间进行平衡。

请注意,平衡器仅平衡数据,不会平衡名字空间。有关完整的命令用法,请参阅平衡器文档

退役

退役类似于以前的版本。将需要退役的节点添加到所有Namenodes的[exclude]文件中。每个Namenode将会退役其对应的Block Pool。当所有Namenode完成DataNode的退役后,Datanode宣告退役。

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

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

步骤2:刷新所有的Namenode以接收新的排除文件:

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

上述命令使用HDFS配置信息来确定集群中的Namenode,并刷新它们来接收新的排除文件。

集群Web控制台

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

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

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

  • 一个Namenodes的列表和一个摘要,包含了每个Namenode的文件数,块数,缺失块数,以及存活和挂掉的数据节点数。它还提供访问每个Namenode的Web UI的链接。

  • Datanodes的退役状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值