Hadoop分布式文件系统--HDFS结构分析
转自: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结构分析的更多相关文章
- 【转载】Hadoop分布式文件系统HDFS的工作原理详述
转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...
- Hadoop分布式文件系统HDFS详解
Hadoop分布式文件系统即Hadoop Distributed FileSystem. 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并 ...
- Hadoop分布式文件系统HDFS的工作原理
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
- 对Hadoop分布式文件系统HDFS的操作实践
原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...
- Hadoop 分布式文件系统 - HDFS
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...
- Hadoop分布式文件系统HDFS
HDFS的探究: HDFS HDFS是 Hadoop Distribute File System的缩写,是谷歌GFS分布式文件系统的开源实现,Apache Hadoop的一个子项目,HDFS基于流数 ...
- CM记录-Hadoop 分布式文件系统HDFS(登录、配置、监控)
1.登录(浏览器输入ip地址:7180,登录用户名和登录密码即可) 2.CM主界面(各个组件,监控图表,绿色代表运行正常.黄色代表运行不良,需要关注根据实际情况调整,红色代表故障,需要排查问题) 3. ...
- Hadoop 分布式文件系统:架构和设计
引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...
- 【官方文档】Hadoop分布式文件系统:架构和设计
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 “移动计 ...
随机推荐
- VS提示无法连接到已配置的开发web服务器的解决方法
VS2013每次启动项目调试好好的,今天出现了提示“提示无法连接到已配置的开发web服务器“,使用环境是本地IISExpress,操作系统为windows10,之前也出现过就是重启电脑又好了,这次是刚 ...
- Git学习笔记二--工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 简单理解: 我们使用mkdir Git在d盘下创建的文件夹,就是工作区,我们编辑readme.txt文件就是在工作区下完成的: gi ...
- 饿了么ui添加事件
最近饿了么ui挺火,连美团都有项目组再用,刚好最近项目重构,就引入了进来,刚用上就发现一个大坑,在配合vue使用时,居然无法添加自定义事件 找了半天才发现原因是需要在事件后面加上 ‘’.native ...
- Json 简易教程
一.什么是Json JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式 ...
- 【ajax+php】动态展示4级单位(省、市、县、镇)
1.本篇教程以ajax+php动态展示[省.市.县.镇]四级地区单位 2.效果图: 3.不废话,贴代码! HTML: <div class="form-group"&g ...
- 【MySQL】玩转定时器
1.前置条件,你需要将服务器和mysql的时间都设置成东八区,php.ini和my.cnf配置(参考上篇文章) 2.进入mysql客户端,推荐Navicat for mysql 3.首先查看是否开启了 ...
- FAT AP v200R005 配置二层透明模式(web&命令行,开局)
背景: vlan123:用户业务vlan,192.168.1.0/24 Vlan2001:管理vlan,172.168.129.0/24 vlan1:默认vlan,不建议使用. 注意事项: 配置服务集 ...
- shell脚本中执行mysql 语句,去除warning using a password on the command line interface can be insecure信息
方法二:使用mysql参数的方法 mysql -u$user -p$pass -D $db -e "select host from user;"当然,可以通过将传参的方式来传递 ...
- c#删除 list中的元素和怎么去除空元素
; i >= ; i--) { if (list[i].NO == item.NO) { list.RemoveAt(i); } } public void RemoveItemFromList ...
- django源码分析---- Model类型&Field类型
djiango在数据库这方式自己实现了orm(object relationship mapping 对象关系模型映射).这个主要是用到python 元类这一 项python中的高级技术来实现的. c ...