HDFS概述(3)————HDFS Federation
本指南概述了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的示例配置:
<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.secondaryhttp-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.secondaryhttp-address.ns2</name>
<value>snn-host2:http-port</value>
</property> .... Other common configuration ...
</configuration>
格式化Namenodes
步骤1:使用以下命令格式化Namenode:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
选择一个唯一的cluster_id,它不会与您的环境中的其他集群冲突。如果未提供cluster_id,则会自动生成唯一的。
步骤2:使用以下命令格式化附加的Namenodes:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId <cluster_id>
请注意,步骤2中的cluster_id必须与步骤1中的cluster_id相同。如果它们不同,则附加的Namenodes不会是联合集群的一部分。
从旧版本升级并配置Federation
较旧的版本只支持一个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。通过对集群中的所有Datanode运行以下命令,刷新Datanodes以获取新添加的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进程。Datanodes在工作文件中指定的节点上启动。该脚本可以用作构建自己的脚本来启动和停止集群的参考。
平衡器
平衡器已被更改为使用多个Namenodes。可以使用以下命令运行Balancer:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start balancer [-policy <policy>]
policy参数可以是以下任一项:datanode - 这是默认策略。这样可以平衡Datanode级别的存储空间。这与以前版本的平衡策略相似。块池 - 这将平衡块池池级别的存储空间,并在Datanode级别进行平衡。请注意,Balancer仅平衡数据,不平衡命名空间。有关完整的命令用法,请参阅平衡器。
退役
退役类似于以前的版本。需要分解的节点将添加到所有Namenodes的排除文件中。每个Namenode取消其Block Pool。当所有Namenodes完成退役Datanode时,Datanode被视为已退役。
步骤1:要将排除文件分发到所有的Namenodes,请使用以下命令:
[hdfs]$ $HADOOP_HOME/sbin/distribute-exclude.sh <exclude_file>
步骤2:刷新所有的Namenodes以接收新的排除文件:
[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的更多相关文章
- HDFS概述(5)————HDFS HA
HA With QJM 目标 本指南概述了HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS集群. 本文档假设读者对HDFS集群 ...
- HDFS概述
HDFS概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS产出背景及定义 1>.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配 ...
- [HDFS Manual] CH6 HDFS Federation
HDFS Federation HDFS Federation 1 Background 2.多个namenode/namespace 2.1 关键好处 3 联合配置 3.1 配置 3.2 格式化na ...
- HDFS概述(一)
HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...
- HDFS概述和Shell操作
大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令 ...
- Hadoop(5)-HDFS概述
HDFS产生背景 HDFS优缺点 HDFS组成架构 HDFS文件块大小
- [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 ...
- [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. ...
- 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)
一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...
随机推荐
- c语言中的文件格式化读写函数fscanf和fprintf函数
很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...
- 10分钟搞懂Tensorflow 逻辑回归实现手写识别
1. Tensorflow 逻辑回归实现手写识别 1.1. 逻辑回归原理 1.1.1. 逻辑回归 1.1.2. 损失函数 1.2. 实例:手写识别系统 1.1. 逻辑回归原理 1.1.1. 逻辑回归 ...
- < 软件工程 第一次作业 >
自我介绍: 老师好! 我叫李智强,专业是计算机科学与技术,我自己也喜欢这个专业,然后这是我第一次用博客写自我介绍,可能会写的有点不好,还请包涵. 课程期望和目标: 第一次上课,听着老师说我们可能会做很 ...
- Linux-insmod/rmmod/lsmod驱动模块相关命令(10)
insmod:加载模块 参数: -f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入.-k 将模块设置为自动卸除.-m 输出模块的载入信息.-o <模块名称 ...
- NPIO 导出Execl
步骤1:导入NOIO.dll (我导入压缩包中的4.0)
- TP 3.2 笔记 (1)
1.配置文件分布在好多子模块中 2.I方法 使用指定过滤方法来过滤变量,第三个参数如果是函数名,则会调用该函数进行过滤,(在变量是数组的情况下自动使用array_map进行过滤处理),否则会调用 PH ...
- 个人作业-2 必应词典安卓APP分析
产品: 必应词典 安卓版 第一部分:调研,评测 1.对于这款app的第一印象就是界面不是很美观,页面排版十分混乱,有些功能比较鸡肋,功能也不是很丰富,不过这款app的ui设计相对简洁,让人容易上手,对 ...
- 201521123073 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 (1)集合里面获取对象的时候我们必须进行强制类型转换. List st ...
- Markdown例
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...
- 多线程面试题系列(3):原子操作 Interlocked系列函数
上一篇中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错.这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将 ...