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

当前HDFS背景

HDFS主要有两层:

  1.Namespace

    (1)包含目录,文件和块。

    (2)它支持所有命名空间相关的文件系统操作,如创建,删除,修改和列出文件和目录。

2.Block Storage,分为两部分:

     (1)块管理(在Namenode中执行)通过处理注册和周期性心脏跳动来提供Datanode集群成员资格。处理块报告并维护块的位置。支持块相关操作,如创建,删除,修改和获取块位置。管理复制块下的副本放置,块复制,并删除过度复制的块。

    (2)存储 - 由Datanodes通过在本地文件系统上存储块并允许读/写访问来提供。

当前HDFS架构只允许整个集群中存在一个namespace,而该namespace被仅有的一个namenode管理。这个架构使得HDFS非常容易实现,但是,它(见上图)在具体实现过程中会出现一些模糊点,进而导致了很多局限性(下面将要详细说明),当然这些局限性只有在拥有大集群的公司,像baidu,腾讯等出现。

Multiple Namenodes/Namespaces

为了水平扩展名称服务,联合使用多个独立的Namenodes /命名空间。纳米诺斯联盟;Namenodes是独立的,不需要相互协调。Datanodes用作所有Namenodes的块的通用存储。每个Datanode注册到集群中的所有Namenodes。Datanodes发送周期性的心跳和块报告。他们还处理Namenodes的命令。

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

Block Pool

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

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

ClusterID

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

主要优点

命名空间可伸缩性 - Federation会添加命名空间水平缩放。通过允许将更多的Namenodes添加到集群中,使用大量小文件的大型部署或部署可以从命名空间缩放中获益。

性能 - 文件系统吞吐量不受单个Namenode的限制。将更多的Namenodes添加到集群可以缩放文件系统的读/写吞吐量。

隔离 - 单个Namenode在多用户环境中不提供隔离。例如,实验应用程序可能会超载Namenode并减缓生产关键应用程序。通过使用多个Namenodes,可以将不同类别的应用程序和用户隔离到不同的命名空间。

Federation 配置

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

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

配置步骤

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

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

Daemon Configuration Parameter
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.dirdfs.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

以下是两个Namenodes的示例配置:

  1. <configuration>
  2. <property>
  3. <name>dfs.nameservices</name>
  4. <value>ns1,ns2</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.rpc-address.ns1</name>
  8. <value>nn-host1:rpc-port</value>
  9. </property>
  10. <property>
  11. <name>dfs.namenode.http-address.ns1</name>
  12. <value>nn-host1:http-port</value>
  13. </property>
  14. <property>
  15. <name>dfs.namenode.secondaryhttp-address.ns1</name>
  16. <value>snn-host1:http-port</value>
  17. </property>
  18. <property>
  19. <name>dfs.namenode.rpc-address.ns2</name>
  20. <value>nn-host2:rpc-port</value>
  21. </property>
  22. <property>
  23. <name>dfs.namenode.http-address.ns2</name>
  24. <value>nn-host2:http-port</value>
  25. </property>
  26. <property>
  27. <name>dfs.namenode.secondaryhttp-address.ns2</name>
  28. <value>snn-host2:http-port</value>
  29. </property>
  30.  
  31. .... Other common configuration ...
  32. </configuration>

格式化Namenodes

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

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

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

步骤2:使用以下命令格式化附加的Namenodes:

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

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

从旧版本升级并配置Federation

较旧的版本只支持一个Namenode。将集群升级到较新版本以启用联合在升级期间,您可以提供如下的ClusterID:

  1. [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。通过对集群中的所有Datanode运行以下命令,刷新Datanodes以获取新添加的Namenode:

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

管理集群

启动和停止集群

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

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

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

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

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

平衡器

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

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

policy参数可以是以下任一项:datanode - 这是默认策略。这样可以平衡Datanode级别的存储空间。这与以前版本的平衡策略相似。块池 - 这将平衡块池池级别的存储空间,并在Datanode级别进行平衡。请注意,Balancer仅平衡数据,不平衡命名空间。有关完整的命令用法,请参阅平衡器。

退役

退役类似于以前的版本。需要分解的节点将添加到所有Namenodes的排除文件中。每个Namenode取消其Block Pool。当所有Namenodes完成退役Datanode时,Datanode被视为已退役。

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

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

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

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

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

群集Web控制台

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

群集Web控制台提供以下信息:一个集群摘要,显示了整个集群的文件数,块数,总配置存储容量以及可用和已用存储。包含Namenode列表和一个摘要,其中包含每个Namenode的文件数,块数,缺失块数,实时数和死区数据节点数。它还提供访问每个Namenode的Web UI的链接。Datanodes的退役状态。

http://dongxicheng.org/mapreduce/hdfs-federation-introduction/

HDFS概述(3)————HDFS Federation的更多相关文章

  1. HDFS概述(5)————HDFS HA

    HA With QJM 目标 本指南概述了HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS集群. 本文档假设读者对HDFS集群 ...

  2. HDFS概述

    HDFS概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS产出背景及定义 1>.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配 ...

  3. [HDFS Manual] CH6 HDFS Federation

    HDFS Federation HDFS Federation 1 Background 2.多个namenode/namespace 2.1 关键好处 3 联合配置 3.1 配置 3.2 格式化na ...

  4. HDFS概述(一)

    HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...

  5. HDFS概述和Shell操作

    大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令    ...

  6. Hadoop(5)-HDFS概述

    HDFS产生背景 HDFS优缺点 HDFS组成架构 HDFS文件块大小

  7. [HDFS Manual] CH3 HDFS Commands Guide

    HDFS Commands Guide HDFS Commands Guide 3.1概述 3.2 用户命令 3.2.1 classpath 3.2.2 dfs 3.2.3 envvars 3.2.4 ...

  8. [HDFS Manual] CH2 HDFS Users Guide

    2 HDFS Users Guide 2 HDFS Users Guide 2.1目的 2.2.概述 2.3.先决条件 2.4. Web Interface 2.5. Shell Command 2. ...

  9. 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)

    一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...

随机推荐

  1. 接口测试 mock server 工具moco学习笔记

    看过乙醇分享的接口测试,自己练习了moco,这里呢,吧一些练习的笔记坐下记录,方便自己查阅. 开源地址https://github.com/dreamhead/moco  ,  到QuickStart ...

  2. 打印1到最大的n位数-Java

    在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法.我觉得要给就给最好的方法,下面是我自己参考C++代码写的ja ...

  3. React 实现一个漂亮的 Table

    概述 对于企业级后台产品来说,Table 应该是使用最频繁的组件了,它通常比 Form 和 Chart 的使用还频繁.对于这么一个常用的组件,我们决定要把它从 RSuite 中单独出来开发,并且要具有 ...

  4. INotifyPropertyChanged(监听数据),当数据改变时调用

    public class BaseViewModel : INotifyPropertyChanged    {        public event PropertyChangedEventHan ...

  5. [转]linux中颜色的含义

    绿色文件---------- 可执行文件,可执行的程序 红色文件-----------压缩文件或者包文件 蓝色文件----------目录  www.2cto.com     白色文件-------- ...

  6. 教你自己搭建linux邮箱服务器

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt290 现在网络中流行的电子邮件系统主要有Microsoft Exchange ...

  7. yum安装mariadb-galera同步

    节点             ip地址      hostname                            系统版本   程序版本 node1 10.4.90.90 mysql1 db1 ...

  8. java aio nio bio

    转自:http://blog.csdn.NET/liuxiao723846/article/details/45066095 Java中的IO主要源自于网络和本地文件 IO的方式通常分为几种,同步阻塞 ...

  9. 2015级软工实践k班第一次作业-准备

    第一次作业-准备······ 几篇文章阅读下来发现一个事实,还是要有明确的目标,清楚自己需要做什么最为重要.然后根据目标确定需要为之所做的准备工作,考研也好,工作也罢,都是服务于自己的目标. 问题答应 ...

  10. [05] Session概要

    1.Session是什么 除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态,即Session是服务器端使用的一种保存客户端状态的机制.Cookie在客户端,Session ...