文档章节

HDFS Federation(翻译)

Yulong_
 Yulong_
发布于 2017/08/15 17:42
字数 1852
阅读 16
收藏 0
点赞 0
评论 0

这个指南提供了一个关于HDFS Federation 特性和怎么配置管理一个联邦集群的概览。

Background

HDFS主要包括两层:

Namespace

  • 由目录,文件和块组成
  • 支持所有文件系统操作包括增加,删除,修改和列出文件和目录

Block Storage Service 有两个部分:

  • Block管理(被NameNode包含)
    • 提供datanode集群的注册和定期的心跳检查
    • 处理block的报告并掌握block的位置
    • 支持block的相关操作,如增删改查和得到block的位置
  • 管理副本位置,管理副本的复制和删除
  • 存储-由提供datanodes的本地系统提供存储,允许读写。

之前HDFS的架构只允许整个集群中存在一个namespace。一个独立的Namenode管理这个namespace。HDFS Federation通过加入多个Namenodes/namespaces到集群当中解决了之前架构的限制。

Multiple Namenodes/Namespaces

为了水平扩展name services,Federation使用多个独立的Namenodes/namespaces。这些NameNode之间结成联邦,即Namenodes是独立的,不需要互相协调。DataNode被所有的NameNode使用用来作为通用的数据块存储设备。每一个DataNode注册集群中所有的NameNode。Datanodes发送心跳和block报告并且处理NameNode发送的命令。

Users may use ViewFs to create personalized namespace views, where ViewFs is analogous to client side mount tables in some Unix/Linux systems.

Block 池:

一个block池是一个隶属于一个namespace的所有block的集合。DataNode为所有的block池储存集群当中的block信息。block池被独立管理,互不影响。这个设计将允许为新的block产生Block ID并不会需要其他的namespace。一个NameNode出问题也不会影响datanode为集群中的其他NameNode服务。Namespace及其block池在一起叫做 Namespace Volume(Namespace 卷)。它是一个独立的单位管理。当一个Namenode/namespace被删除的时候,在datanodes中的对应的block池也会被删除。在集群升级时,一个namespace volume是一个升级单元。

ClusterID

一个新的标识ClusterID用来标示集群当中所有的节点。当一个Namenode被格式化,这个标识符或自动生成的。这个ID会被用来格式化集群中的其他Namenode。

关键的好处

  • Namespace扩展性-HDFS集群存储可以水平扩展但是namespace不行。大型部署或者是小文件较多的系统可以通过向集群添加更多的NameNode获益。
  • 性能-之前的架构中,文件系统的吞吐量受限于单一NameNode。添加更多的NameNode会提高读写的吞吐量
  • 隔离 - 单一NameNode无法隔离多用户环境,实验的程序可能造成Namenode变慢,影响生产环境,多个Namenodes使得不同类别的应用程序和用户可以分离不同的名称空间。

Federation Configuration

Federation配置是向后兼容,允许现有的单一Namenode配置工作,不会有任何改变。新的配置被设计成集群当中的所有节点拥有着相同的配置并且并不需要为不同的机器设置不同的配置文件。

Federation中添加了一个新的抽象NameServiceID。Namenode以及对应的Secondary/backup/checkpointer节点都属于这个。支持单个配置文件,Namenode以及对应的econdary/backup/checkpointer配置参数通过NameServiceID后缀标示,并可以添加到同样的配置文件当中。

配置

第一步:添加下面的配置到你的配置文件当中:

dfs.nameservices: 配置与逗号分隔NameServiceIDs列表

这是为了Datanodes用来确定集群中的所有Namenodes。

第二步:为每一个Namenode以及Secondary/backup/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.dirdfs.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.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>

格式化NameNode

第一步:格式化namenode,命令如下:

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

选择一个不同的cluster_id,保证不会和其他的集群冲突,如果不提供的话,他会自动生成一个不同的ClusterID 

第二步: 格式化添加的namenode,可以用下面的命令:

> $HADOOP_PREFIX_HOME/bin/hdfs namenode -format -clusterId <cluster_id>

注意:第二步使用的cluster_id不行要和第一步相同,如果不相同的话,添加的Namenode将不会在联邦集群中起作用

从老版本升级之后并且配置联邦

早期的版本只能支持单一的Namenode,下面的步骤可以是联邦可用:

第一步:升级集群。在升级过程中你一个提供一个ClusterID:

> $HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR  -upgrade -clusterId <cluster_ID>

如果不提供那么会自动生成。

添加一个新的NameNode到一个既存的HDFS集群

按照以下步骤:

  • 添加配置参数dfs.nameservices到配置文件
  • 使用NameServiceID 作为后缀更新配置文件。配置的key名字已经和0.20不一致了,必须使用新的配置参数名
  • 添加新的NameNode相关配置到配置文件当中
  • 将配置文件同步到集群当中的所有节点
  • 启动新的Namenode, Secondary/Backup节点
  • 刷新datanode获取新添加的namenode,使用下列命令:
> $HADOOP_PREFIX_HOME/bin/hdfs dfadmin -refreshNameNode <datanode_host_name>:<datanode_rpc_port>

在集群中所有的datanodes运行上面的命令

Managing the cluster

Starting and stopping cluster

启动:

> $HADOOP_PREFIX_HOME/bin/start-dfs.sh

停止:

> $HADOOP_PREFIX_HOME/bin/stop-dfs.sh

这些命令可以在在HDFS运行的任何节点运行。命令将确定namenode并且启动这些namenode。datanode是通过slaves文件指定的。脚本可以作为参考来构建自己启动和停止集群的脚本。

Balancer

Balancer 已经被用来改变集群中多个NameNode的的平衡。可以运行下面的命令:

> "$HADOOP_PREFIX"/bin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer [-policy <policy>]

Policy:

  • datanode -默认的策略。这个会平衡datanode的存储,和先前的版本类似。

  • blockpool - 针对block 池平衡。平衡block池存储也会平衡datanode。

注意Balande只平衡数据和不平namespace。

 

Decommissioning

退役和先前的版本类似。退役的节点需要被添加到在所有Namenode的exclude文件中。每一个Namenode退役它对应的block 池当所有的Namenode完成了datanode的退役,那么这个datanode就可以退役了

第一步:分发一个exclude文件到所有的NameNode,如下:

> "$HADOOP_PREFIX"/bin/distributed-exclude.sh <exclude_file>

第二步:刷新所有NameNode使用新的exclude文件

> "$HADOOP_PREFIX"/bin/refresh-namenodes.sh

上面的命令将使用HDFS配置文件确定集群的Namenode,使用新的exclude文件刷新所有的Namenode。

Cluster Web Console

和NameNode的web页面类似,集群的web cosole用来监视集群 http://<any_nn_host:port>/dfsclusterhealth.jsp。任何集群中的NameNode都可以进入这个页面

页面提供了:

  • 集群的综述,包括文件的数目,block的数目总存储容量可用和空闲的空间等
  • 提供namenode的列表和每个namenode的files,blocks,missing blocks,number of live and dead data nodes数量。同事提供一个连接去每一个Namenode 的web页面
  • 退役datanode的状态

© 著作权归作者所有

共有 人打赏支持
Yulong_
粉丝 8
博文 79
码字总数 169760
作品 0
朝阳
部门经理
HDFS Federation(HDFS 联盟)介绍

1. 当前HDFS架构和功能概述 我们先回顾一下HDFS功能。HDFS实际上具有两个功能:命名空间管理(Namespace management)和块/存储管理服务(block/storage management)。 1.1 命名空间管理 HD...

zqx1787 ⋅ 2014/12/13 ⋅ 0

HDFS Federation(HDFS 联盟)介绍

当前HDFS架构和功能概述 我们先回顾一下HDFS功能。HDFS实际上具有两个功能:命名空间管理(Namespace management)和块/存储管理服务(block/storage management)。 1.1 命名空间管理 HDFS...

蓝狐乐队 ⋅ 2014/04/27 ⋅ 0

分布式文件系统HDFS中的Federation

HDFS Federation是Hadoop-0.23.0中为解决HDFS单点故障而提出的namenode水平扩展方案。该方案允许HDFS创建多个namespace以提高集群的扩展性和隔离性。本篇文章主要介绍了HDFS Federation的设计...

LIPING234 ⋅ 2013/10/22 ⋅ 2

hadoop2.x的配置一

hadoop该怎么配置配置文件? 1.找到官网的配置文件,用官网的配置文件做参考,进官网找对应版本的document,找到Configuration,下面就有相应配置文件了。 2.官网的配置文件只是做参考,配置...

cjun1990 ⋅ 2015/08/05 ⋅ 0

Hadoop手把手逐级搭建,从单机伪分布到高可用+联邦(4)Hadoop高可用+联邦(HA+Federation)

第四阶段: Hadoop高可用+联邦(HA+Federation) 0. 步骤概述 1. 为高可用保存hadoop配置 1.1 进入$HADOOP_HOME/etc/目录 1.2 备份hadoop高可用配置,供以后使用 1.3 查看$HADOOP_HOME/etc/目录...

bigablecat ⋅ 01/05 ⋅ 0

HDFS Federation

在Hadoop 2.0之前,也有若干技术试图解决单点故障的问题: Secondary NameNode。 它不是HA,它只是阶段性的合并edits和fsimage,以缩短集群启动的时间。 当NameNode失效的时候,Secondary NN并...

散关清渭 ⋅ 2015/07/23 ⋅ 0

【Hadoop】HDFS NameNode Federation联盟架构

1、当前HDFS的局限性 当前HDFS包含两层结构: (1)Namespace 管理目录,文件和数据块。它支持常见的文件系统操作,如创建文件,修改文件,删除文件等。 (2) Block Storage有两部分组成: ...

gongxifacai_believe ⋅ 04/19 ⋅ 0

Hadoop 2.0 Federation

原文:http://www.linuxidc.com/Linux/2014-05/101179.htm 1 概述 在Hadoop1.0的架构中,HDFS的所有的元数据都放在一个namenode中,只有一个namespace(名字空间)。这样随着HDFS的数据越来越多...

柴火 ⋅ 2014/09/22 ⋅ 0

hadoop hdfs federation 无法访问dfsclusterhealth.jsp

利用hadoop2.6.3搭建的hdfs federation,可以用dfsclusterhealth.jsp访问,但是,用2.7.2搭建的hdfs federation,dfsclusterhealth.jsp访问不了了,为404.请问是2.7.2中的web页面换了吗?我在...

jungggle ⋅ 2016/06/12 ⋅ 0

CCAH-CCA-500-2题:what is the maximum number of NameNode daemons.....

2.Assuming you’re not running HDFS Federation, what is the maximum number of NameNode daemons you should run on your cluster in order to avoid a “split-brain” scenario with ......

sh_jepson ⋅ 2016/04/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部