官网HDFS Federation的理解与配置

来源:互联网 发布:php网页源代码加密 编辑:程序博客网 时间:2024/05/19 00:48

HDFS Federation

  • HDFS Federation
    • Background
    • Multiple Namenodes/Namespaces
      • Key Benefits
    • Federation Configuration
      • Configuration:
      • Formatting Namenodes
      • Upgrading from older release to 0.23 and configuring federation
      • Adding a new Namenode to an existing HDFS cluster
    • Managing the cluster
      • Starting and stopping cluster
      • Balancer
      • Decommissioning
      • Cluster Web Console

这是对HDFS Federation特性以及怎样配置管理HDFS Federation的概述。

背景

HDFS 主要有两层:

  • Namespace(命名空间)
    • 由目录、文件以及block组成
    • 它支持所有对于命名空间相关系统的操作,如增删改查。
  • Block Storage Service (块存储服务)有两个部分
    • 管理Block(在 Namenode中完成)
      • 通过控制注册以及阶段性的心跳,来保证datanode在正确运行。.
      • 运行block信息报告,维护block的位置信息.
      • 支持所有对于block位置信息的操作,如增删改查.
      • 管理block之间的更换交替,并且删除被替换的block.
    • 存储 - 由datanodes提供,它们将block存储在本地系统中,允许读写访问。

前一阶段的 HDFS架构中一个集群只支持一个namespace。由这个单独的namenode来管理这些namespace。而 HDFS Federation在hdfs系统中增加了多个Namenodes/namespaces,打破了这一限制.

多个Namenodes/Namespaces

为了使命名服务横向扩展, federation 使用多个各自独立的 Namenodes/namespaces. 这些 Namenodes 组成联邦组织,也就是说, 这些 Namenodes是独立的,不需要与任何其他namenode进行合作. 所有的namenode共享所有的datanode作为存储. 每一个datanode都在集群中所有的namenode注册自己的信息. 而且Datanodes需要阶段性地向所有的namenode发送心跳信息和块信息报告,处理来自namenode的命令.

Block池

Block池就是属于一个namespace的一些block. Datanodes为所有namenode存储block。一个block池与其他block池被分别管理。这样就允许一个namespace产生一些不必与其他namespace的block打交道的新的block。一个namenode的失败就不会影响到其他namenode下的datanode.

一个namespace和它的block池被称为Namespace Volume。它是一个独立的管理单元。当一个Namenode/namespace被删除,对应的block池中的所有datanode都被删除了。每一个namespace volume会在集群升级的时候,作为一个单元被升级。

集群ID

ClusterID 是用来区分集群中的所有节点的。当一个Namenode 被格式化,这个标识符就会自动产生出来,它应该被用来格式化其他namenode到集群中.

关键性能参数

  • Namespace扩展性 - HDFS集群存储容易扩展,但是namespace却不能。 集群中的namenode越多,大的部署或者使用很多小文件的部署受益越多
  • IO性能 - 文件系统操作的生产力首先于单节点namenode. 多加几个Namenodes能够让文件系统的读写加快.
  • 独立性 - 单节点 Namenode在多用户环境中时不能提供有效隔离. An experimental application can overload the Namenode and slow down production critical applications. With multiple Namenodes, 不同类别的应用和用户可以被安排与不同的namespace通信.

Federation配置

Federation configuration is 向后兼容(backward compatible) 并且已经存在的namenode继续工作,不用做任何改变. The new configuration is designed such that all the nodes in the clusterhave same configuration without the need for deploying different configurationbased on the type of the node in the cluster.

A new abstraction called NameServiceID is added with federation. Namenode 和它对应的secondary/backup/checkpointer nodes都属于这个ID. 为了区分各个namenode的各自的配置文件,  Namenode 和它的 secondary/backup/checkpointer 的配置信息都以 NameServiceID为后缀 ,并且都放进同一个配置文件中.

配置:

Step 1: 在你的配置文件中加入如下参数: dfs.nameservices: 一些NameServiceID,用逗号隔开. 这个参数是被datanode用来识别namenode的.

Step 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.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//跟上面的重复了。。。官网有疏忽貌似

 

这是一个有两个namendoe的案例:

<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

Step 1: 使用如下命令格式化namenode:

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

选择一个唯一的cluster_id, 这个cluster_id不能和当前环境中的其他集群冲突。如果不写这个参数的话,会自动产生一个.

Step 2:使用如下命令格式化其他namenode:

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

注意这里的cluster_id 必须要和在第一步中使用的一致,否则新加的这个namenode就不会成为第一步中集群的一员.

从老版本升级

老版本支持单节点Namenode. 下面是升级到federation的步骤:

Step 1: 升级集群到一个更新的发布版本,可以提供一个cluster_id:

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

如果不提供cluster_id, 它还是会自动产生,呵呵.

在已有的hdfs集群中添加namenode

  • 在配置文件中添加参数 dfs.nameservices.
  • 将配置信息以NameServiceID作为后缀. 在0.20以后有一些配置参数的名称改变了.我们建立联邦必须修改为新的参数名称.
  • 在配置文件中加入新Namenode的相关信息.
  • 向所有节点分发新的配置文件.
  • 启动新的Namenode, Secondary/Backup.
  • 刷新datanodes,让它们知道又来了新领导:

>$HADOOP_PREFIX_HOME/bin/hdfs dfadmin -refreshNameNode<datanode_host_name>:<datanode_rpc_port>

  • 上面所有的命令必须在集群中的所有datanode上刷新(可以写shell脚本啥的).

管理集群

启动和停止集群

启动集群:

>$HADOOP_PREFIX_HOME/bin/start-dfs.sh

停止集群:

>$HADOOP_PREFIX_HOME/bin/stop-dfs.sh

只要有HDFS的配置信息,这些命令可以在任意节点运行. 命令运用配置信息去判断集群中的namenode是哪个,然后找到它启动namenode。slaves中指定了namenode。你可以自定义脚本来启动或者停止集群。

Balancer

Balancer被修改成与集群中的多个Namenodes协同工作.

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

平衡策略是:

  • node - 默认策略. 这是平衡datanode级别的存储. 这个策略和以前版本的策略很像。
  • blockpool - 这是block池级别. 也负责平衡datanode级别.

注意: Balander只平衡数据,不平衡namespace.

退役

Decommissioning和以前版本一样. 在所有的namenode,要退役的节点被加入exclude. 每一个Namenode 将他的block池退役. 当所有的Namenodes完成了退役, 这个datanode 就要退役了.

Step 1: 退役一个datanode的命令:

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

Step 2: 刷新通知所有的namenode.

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

以上命令通过HDFS配置信息来判断Namenodes并且刷新这些namenodes.

集群 Web 控制台

 http://<any_nn_host:port>/dfsclusterhealth.jsp. 集群中的所有可用的Namenode都可以访问这个web页面.

这个web页面提供以下信息:

  • 集群的文件数,block数,总的存储容量,可用存储容量.
  • Namenodes的列表以及每个namenode的文件总数,block数, missing blocks, 死了和活着的datanodes. 它还提供了访问namenode的链接.
  • 提供即将退役的datanode的状态信息.

 

0 0
原创粉丝点击