Hadoop分布式文件系统--HDFS结构分析
2015-12-17 17:39
387 查看
前言
在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结构设计与实现原理》.蔡斌等
相关文章推荐
- nginx记录响应与POST请求日志
- android特有的核心模块(Linux内核层)
- linux 将更新的文件copy到sshfs挂载主机,监测sshfs,不存在则启动
- shell 脚本,功能上传图片(第一次写shell,留作纪念)
- 企业内部网段检测有多少主机存活——shell脚本
- 载入和显示纹理
- Hadoop关键任务Job资源隔离方案
- Oops信息及栈回溯
- Hadoop动态调整Map Task内存资源大小
- OpenCV两张图片的合并
- Hadoop节点"慢磁盘"监控
- Linux如何打开swf文件
- Eclipse下tomcat更改发布目录
- NSRunLoop
- OpenGL(1)——环境搭建
- Linux指令--nl
- Linux指令--nl
- Linux下配置OpenGL开发环境
- 关于InputFormat的数据划分、Split调度、数据读取问题
- Linux指令--cat,tac