转自:http://blog.csdn.net/androidlushangderen/article/details/47377543

HDFS系列:http://blog.csdn.net/Androidlushangderen/article/category/5734703

前言

在Hadoop内部,具体实现了许多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了。但是本篇文章不会讲HDFS的主从架构等东西,因为这些东西网上和资料书中都讲得很多了。所以,我决定以我个人的学习所得,来讲讲HDFS内部的一些有意思的东西,也作为一个起始点,为后续继续深入其中模块的学习做基础。

HDFS两大主流关系模块

  • 与NameNode相关,文件系统元数据操作相关。包括文件目录树,每个文件对于数据块列表,fsImgae镜像文件和editlog编辑日志在维护整个集群元数据的时候的各种操作。

  • 与DataNode相关,指的就是数据块与数据节点的对应关系,通俗的理解就是某个数据块保存在哪些数据节点上。里面其实会涉及到很多操作,包括block副本复制,损坏块删除,租约机制等等。

第一关系模块(NameNode相关)

涉及的类

INode

Hadoop也同样用了类似linux文件系统中的i-node的概念,即索引节点。INode是一个抽象类,后面的INodeDirectory以及INodeFile都是他的子类,这样就可以做到保持一些共有的属性。

INodeDirectory,INodeFile

  • 常用方法:

    • INodeDirectory.removeChild()

FSImage

  • 命名空间镜像类,下面是常用的方法

    • FSImage.saveFSImage()–讲当前时刻的命名空间镜像,保存文件中
    • FSImage.loadFSImage()–读取镜像文件中的数据,恢复元数据

FSEditLog

  • 编辑日志类,下面是常用方法

    • FSEditLog.logEdit()–写入日志记录操作。
    • FSEditLog.logSync()–同步日志记录操作。
    • FSEditLog.rollEditLog()–用于第二名字节点上载新命名空间镜像。

FSDirectory

  • HDFS引入FSDirectory作为门面,处理各种操作,然后分派到子系统中的各个对象中。常用方法

    • getFileInfo()–获取文件状态信息
    • setOwner()–修改文件主标识符和用户组标识符

第二关系模块(DataNode相关)

Block数据块相关类

  • BlocksMap–数据块映射,名字节点上数据块的元数据
  • DatanodeDescriptor–数据节点描述符,名字节点对数据节点的抽象
  • BlockInfo-BlocksMap,保存数据节点的信息

数据节点管理

  • refreshNodes()–会读取dfs.hosts.exclude,include配置的信息。
  • registerDatanode–数据节点注册
  • DataNode.offerService()–数据节点利用循环向名字节点发送信息。

网络结构

  • 相关类NetworkTopology,常用方法:

    • getDistance()–计算网络距离
    • isOnSameRack()–判断节点是否属于同一机架上
  • DNSToSwitchMapping–此接口用于主机到网络位置的转换

数据块管理

  • 相关类主要为FSNameSystem,常用方法:

    • FSNameSystem.addStoreBlock()–添加数据块副本
    • blockReceived()–数据块提交方法,数据节点成功接收到一个数据块后,必须使用此方法向名字节点提交数据块信息。

读取数据方法

  • getBlockLocations()–读取数据前需要定位数据的位置,返回LocatedBlock对象实例
  • reportBadBlocks()

租约

  • 简单的说,租约是名字节点给予租约持有者在规定时间内对文件的使用权限。

    • LeaseManager.Lease 租约持有者的信息,就是客户端。
    • LeaseManager.add()–在租约管理器中添加打开文件的信息。
    • FSNamesystem.checkLease()–租约检查操作,为追加数据打开文件,添加,放弃数据块或关闭文件的时候,都需要对被操作的文件进行租约检查。
    • LeaseManager.renewLease()–通过更新Lease.lastUpdate的值来维护租约。
    • LeaseManager.Monitor–这是一个内部类,Monitor类实现了runnable接口,定期进行租约检查。

安全模式

  • SafeMode安全模式是HDFS的一个只读的视图模式,所有的更新操作都会检验一次是否处于安全模式,相关类以及方法

    • SafeModeMonitor–安全模式的检查线程实现类。
    • canLeave()–判断内部的reached变量的值
    • setSafeMode()

参考文献

《Hadoop技术内部–HDFS结构设计与实现原理》.蔡斌等

Hadoop分布式文件系统--HDFS结构分析的更多相关文章

  1. 【转载】Hadoop分布式文件系统HDFS的工作原理详述

    转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...

  2. Hadoop分布式文件系统HDFS详解

    Hadoop分布式文件系统即Hadoop Distributed FileSystem.        当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并 ...

  3. Hadoop分布式文件系统HDFS的工作原理

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

  4. 对Hadoop分布式文件系统HDFS的操作实践

    原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...

  5. Hadoop 分布式文件系统 - HDFS

    当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...

  6. Hadoop分布式文件系统HDFS

    HDFS的探究: HDFS HDFS是 Hadoop Distribute File System的缩写,是谷歌GFS分布式文件系统的开源实现,Apache Hadoop的一个子项目,HDFS基于流数 ...

  7. CM记录-Hadoop 分布式文件系统HDFS(登录、配置、监控)

    1.登录(浏览器输入ip地址:7180,登录用户名和登录密码即可) 2.CM主界面(各个组件,监控图表,绿色代表运行正常.黄色代表运行不良,需要关注根据实际情况调整,红色代表故障,需要排查问题) 3. ...

  8. Hadoop 分布式文件系统:架构和设计

    引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...

  9. 【官方文档】Hadoop分布式文件系统:架构和设计

    http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 “移动计 ...

随机推荐

  1. 云计算之路-Azure vs 阿里云:从负载均衡中摘/挂虚拟机

    @小尾鱼 在 试用Azure:上不了高速的跑车,无法跨Cloud Service的DNS服务器一文的评论中提了一个很好的问题: 问个问题,使用了负载均衡以后,程序发布的时候博客园是怎么避免用户访问到正 ...

  2. Web开发常见的几个漏洞解决方法

    http://www.cnblogs.com/wuhuacong/archive/2013/04/15/3022011.html 如何利用SQL注入漏洞攻破一个WordPress网站 平时工作,多数是 ...

  3. UITextField,UITextView字数限制

    UITextField,UITextView字数限制 主要是使用他们的两个代理方法 //标题限制在 30个字以内 - (BOOL)textField:(UITextField *)textField ...

  4. 无比强大!Python抓取cssmoban站点的模版并下载

    Python实现抓取http://www.cssmoban.com/cssthemes站点的模版并下载 实现代码 # -*- coding: utf-8 -*- import urlparse imp ...

  5. Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显

    http://tieba.baidu.com/p/3038509618?fr=ala0&pstaala=3

  6. Hibernate的批量操作

    在实际的操作中,会经常的遇到批量的操作,使用hibernate将 100条记录插入到数据库的一个很自然的做法可能是这样的 Session session = sessionFactory.openSe ...

  7. CSDN开源夏令营 百度数据可视化实践 ECharts(8)

    (1)前言 首先谢谢林峰老师,继续接着第七篇提到的内容.CSS布局确实非常累,感觉不好看了就的调整,总的看起来的高大上嘛.好了废话不再多说.今天主要就先解说一个页面的内容,对于CSS布局后面讲会具体的 ...

  8. 怎样使用CSS3实现书页(书本)卷角效果

    我们有时候想在页面显示一个公告或用户提示信息. 一个经常使用设计是使用书签形状. 我们能够给书签加入卷角效果.以使其更为逼真.所谓的"卷角"实际上能够用小角度倾斜的阴影效果来模拟. ...

  9. 重置linux mysql root密码

    2.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/my ...

  10. Web檢測

    腾讯电脑管家http://guanjia.qq.com/online_server/webindex.html 安全联盟http://zhanzhang.anquan.org/physical/my_ ...