转自:http://dongxicheng.org/hadoop-hdfs/hdfs-federation-viewfs/

1. HDFS Federation产生背景

在Hadoop 1.0中,HDFS的单NameNode设计带来诸多问题,包括单点故障、内存受限制约集群扩展性和缺乏隔离机制(不同业务使用同一个NameNode导致业务相互影响)等,为了解决这些问题,Hadoop 2.0引入了基于共享存储的HA解决方案和HDFS Federation,本文重点介绍HDFS Federation。

HDFS Federation是指HDFS集群可同时存在多个NameNode,这些NameNode分别管理一部分数据,且共享所有DataNode的存储资源。这种设计可解决单NameNode存在的以下几个问题:

(1)HDFS集群扩展性。多个NameNode分管一部分目录,使得一个集群可以扩展到更多节点,不再像1.0中那样由于内存的限制制约文件存储数目。

(2)性能更高效。多个NameNode管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。

(3)良好的隔离性。用户可根据需要将不同业务数据交由不同NameNode管理,这样不同业务之间影响很小。

需要注意的,HDFS Federation并不能解决单点故障问题,也就是说,每个NameNode都存在在单点故障问题,你需要为每个namenode部署一个backup namenode以应对NameNode挂掉对业务产生的影响。

2. HDFS Federation架构

HDFS Federation的架构我已经在文章“HDFS 设计动机与基本原理”一文中进行了介绍,有兴趣的读者可阅读该文章。

3. HDFS Federation配置介绍

本节不会介绍具体的namenode和datanode的配置方法(如果想了解配置方法,可参考文章:“Hadoop升级方案(二):从Hadoop 1.0升级到2.0(1)”和“Hadoop升级方案(二):从Hadoop 1.0升级到2.0(2)”),而是重点介绍HDFS客户端配置方法,并通过对客户端配置的讲解让大家深入理解HDFS Federation引入的“client-side mount table”(viewfs)这一概念,这是通过新的文件系统viewfs实现的。

(1) Hadoop 1.0中的配置

在Hadoop 1.0中,只存在一个NameNode,所以,客户端设置NameNode的方式很简单,只需在core-site.xml中进行以下配置:

1
2
3
4
<property>
    <name>fs.default.name</name>
    <value>hdfs://host0001:9000</value>
 </property>

设置该参数后,当用户使用以下命令访问hdfs时,目录或者文件路径前面会自动补上“hdfs://host0001:9000”:

bin/hadoop fs –ls /home/dongxicheng/data

其中“/home/dongxicheng/data”将被自动替换为“hdfs://host0001:9000/home/dongxicheng/data”

当然,你也可以不在core-site.xml文件中配置fs.default.name参数,这样当你读写一个文件或目录时,需要使用全URI地址,即在前面添加“hdfs://host0001:9000”,比如:

bin/hadoop fs –ls hdfs://host0001:9000/home/dongxicheng/data

(2)Hadoop 2.0中的配置

在Hadoop 2.0中,由于引入了HDFS Federation,当你启用该功能时,会同时存在多个可用的namenode,为了便于配置“fs.default.name”,你可以规划这些namenode的使用方式,比如图片组使用namenode1,爬虫组使用namenode2等等,这样,爬虫组员工使用的HDFS client端的core-site.xml文件可进行如下配置:

1
2
3
4
<property>
    <name>fs.default.name</name>
    <value>hdfs://namenode1:9000</value>
 </property>

图片组员工使用的HDFS client端的core-site.xml文件可进行如下配置:

1
2
3
4
<property>
    <name>fs.default.name</name>
    <value>hdfs://namenode2:9000</value>
 </property>

从HDFS和HBase使用者角度看,当仅仅使用单NameNode上管理的数据时,是没有问题的。但是,当考虑HDFS之上的计算类应用,比如YARN/MapReduce应用程序,则可能出现问题。因为这类应用可能涉及到跨NameNode数据读写,这样必须显式的指定全URI,即输入输出目录中必须显式的提供类似“hdfs://namenode2:9000”的前缀,以注明目录管理者NameNode的访问地址。比如:

distcp hdfs://nnClusterY:port/pathSrc hdfs://nnCLusterZ:port/pathDest

为了解决这种麻烦,为用户提供统一的全局HDFS访问入口,HDFS Federation借鉴Linux提供了client-side mount table,这是通过一层新的文件系统viewfs实现的,它实际上提供了一种映射关系,将一个全局(逻辑)目录映射到某个具体的namenode(物理)目录上,采用这种方式后,core-site.xml配置如下:

1
2
3
4
5
6
7
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="mountTable.xml"/>
    <property>
      <name>fs.default.name</name>
      <value>viewfs://ClusterName/</value>
    </property>
</configuration>

其中,“ClusterName”是HDFS整个集群的名称,你可以自己定义一个。mountTable.xml配置了全局(逻辑)目录与具体namenode(物理)目录的映射关系,你可以类比linux挂载点来理解。
假设你的集群中有三个namenode,分别是namenode1,namenode2和namenode3,其中,namenode1管理/usr和/tmp两个目录,namenode2管理/projects/foo目录,namenode3管理/projects/bar目录,则可以创建一个名为“cmt”的client-side mount table,并在mountTable.xml中进行如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
  <property>
    <name>fs.viewfs.mounttable.cmt.link./user</name>
    <value> hdfs://namenode1:9000/user </value>
  </property>
  <property>
    <name>fs.viewfs.mounttable.cmt.link./tmp</name>
    <value> hdfs:/ namenode1:9000/tmp </value>
  </property>
  <property>
    <name>fs.viewfs.mounttable.cmt.link./projects/foo</name>
    <value> hdfs://namenode2:9000/projects/foo </value>
  </property>
  <property>
    <name>fs.viewfs.mounttable.cmt.link./projects/bar</name>
    <value> hdfs://namenode3:9000/projects/bar</value>
  </property>
</configuration>

经过以上配置后,你可以像1.0那样,访问HDFS上的文件,比如:

bin/hadoop fs –ls /usr/dongxicheng/data

中的“/usr/dongxicheng/data”将被映射成“hdfs://namenode1:9000/user/dongxicheng/data”。

Client-side mount table的引入为用户使用HDFS带来极大的方便,尤其是跨namenode的数据访问。

4. 参考资料

(1) User Guide for how to use viewfs with federation

(2)Hadoop 23 – dotNext

(3)Hadoop 2.0 NameNode HA和Federation实践

HDFS Federation客户端(viewfs)配置攻略的更多相关文章

  1. linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache   在如下页面下载apache的for Linux 的源码包    http://www.apache.org/dist/httpd/;   存至/home/xx目录,xx是自建文件 ...

  2. DNS 和 IPv6 配置攻略

    Windows 2003 DNS配置攻略 http://lgzeng2360.blog.51cto.com/275998/161908/ http://ask.zol.com.cn/q/21861.h ...

  3. Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)

    http://my.phirobot.com/blog/2014-02-opencv_configuration_in_vs.html 2012年4月给同学写了篇傻瓜式的 VS2010+Opencv- ...

  4. (转)linux服务器安全配置攻略

    引言: 最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小话,这样才能保证服务器最大的安全.下面是CentOS服务器安全设置,供大家参考. ...

  5. hadoop1.2.1+hbase0.94.11+nutch2.2.1+elasticsearch0.90.5安装配置攻略

    一.背景 最近由于项目和论文的需要,需要搭建一个垂直搜索的环境,查阅了很多资料,决定使用Apache的一套解决方案hadoop+hbase+nutch+es.这几样神器的作用就不多作介绍了,自行参考各 ...

  6. linux服务器安全配置攻略

    引言: 最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小话,这样才能保证服务器最大的安全.下面是CentOS服务器安全设置,供大家参考. ...

  7. Intelligencia.UrlRewriter在IIS 7.0下的完全配置攻略

    在项目中,之前公司是使用IIS 7.0官方的URL重写模块,官方的使用说明请参见官方URLRewrite  ,添加伪静态支持,后来经理问我有没有涉及伪静态,我说之前项目中我一直是用Intelligen ...

  8. cloudstack4.2+xenserver6.0.2 详细配置攻略

    搭建一台安装了XenServer的服务器 搭建一台安装了CloudStack的服务器用以管理云平台 可以使用CloudStack云平台进行虚拟机管理 使用远程桌面访问windows虚拟机 由于最近实验 ...

  9. java+eclipse+tomcat+mysql+jdbc——完美配置攻略

    说明: 软件均采用最新版本,请大家详细阅读,注意每个细节,无需分门别类的百度各种教程,配置java环境这一篇就够了. 所需软件及版本(参考): java8; - jdk1.8.0_60; - jre1 ...

随机推荐

  1. win7 配置IIS + php 环境

    一:开启win7 的IIS功能:并开启 CGI 二:下载php5 for windows 解压 三:打开IIS --->>处理程序映射- 参考:http://php.net/manual/ ...

  2. Cg入门21:Fragment shader - 2D纹理採样

    体纹理:是啥? tex2D 曾经仅仅能在Fragment程序中纹理採样 UV坐标系:事实上点为左下角,范围为[0,1].U为x轴,V为y轴 watermark/2/text/aHR0cDovL2Jsb ...

  3. 算法笔记_146:TarJan算法的应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M& ...

  4. Emitting signals

    Objects created from a QtCore.QObject can emit signals. In the following example we will see how we ...

  5. OpenERP 源码变更后数据库升级

    转自:http://vivianyw.blog.163.com/blog/static/13454742220142114422130/?latestBlog OpenERP代码升级后需要对数据进行升 ...

  6. 老生常谈,HashMap的死循环(转)

    本文转自掘金占小狼:用于理解HashMap为什么线程不安全,不能用于并发. 地址就在下文: 问题 由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分 ...

  7. Android开发之Shortcuts, LiveFolder, Widget

    2013-07-05 桌面组件包括:快捷方式(Shortcuts),实时文件夹(Live Folder),桌面插件(Widget).   快捷方式用于启动应用程序的某个组件,例如Activity, S ...

  8. 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

  9. mysql数据库创建删除带横杠的数据库名

    mysql> create database d-d; ERROR 1064 (42000): You have an error in your SQL syntax; check the m ...

  10. baidu经纬度坐标与google经纬度坐标都转换

    baidu经纬度坐标与google经纬度坐标都是经过转换的.使用下面那个url可以将原始坐标或者谷歌的坐标转换成baidu的坐标http://api.map.baidu.com/ag/coord/co ...