我们知道DataNode一个重要的功能就是管理磁盘存储的数据块,DataNode将这个功能切分为2个部分:管理与组织磁盘目录,由DataStorage实现;管理与组织数据块及其元数据,这部分由FSDatasetImpl实现。

在这里,我们先分析DataStorage:

StorageInfo:用于描述存储的基本信息

核心字段:

publicint   layoutVersion;

publicint   namespaceID;

public StringclusterID;

publiclong  cTime;

NodeType:DataNode/NameNode/JournalNode

protectedfinal NodeType storageType;

这些定义的信息都存储在VERSION文件里

StorageState:一个枚举类,列出了存储空间所有可能出现的状态,比如在升级,回滚,升级提交等操作的时候,节点的存储空间可能出现各种异常,列入断点,宕机等,这个时候存储空间就可能处于某种中间状态。有利于从HDFS从错误中恢复过来。

StorageDirectory:我们知道DataNode和 NameNode可以定义多个多个存储目录来存储数据,StorageDirectory定义了管理存储目录的通用方法,简而言之,就是StorageDirectory可以用于管理DataNode或者NameNode定义的存储目录。

有几个比较重要的字段:

//存储根目录

final Fileroot;

//目录是否是共享目录,因为对于HDFSFederation或者HA,他们可能会共享一些存储目录

finalboolean isShared;

//存储目录类型

finalStorageDirType dirType;

//独占锁,支持Data Node或者 Name Node独占某个存储目录

FileLocklock;

//该存储目录的唯一标识符

private StringstorageUuid = null;

比较重要的方法:

StorageDirectroy方法主要分为三类:

获取文件夹相关操作

getCurrentDir、getPreviousDir

加锁/解锁操作

tryLock/unLock

存储状态恢复

比如DataNode在执行升级,提交,回滚操纵的时候,有可能会遇到一些特殊情况,比如断点,宕机等,在DataNode重启的时候,我们又该如何恢到上一次中断的操作呢?StorageDirectory会首先调用analyzeStorage方法分析当前节点所处的状态,然后调用doRecover进行恢复。

Storage:

是一个抽象类,为NameNode,DataNode提供抽象的存储服务。管理着当前节点所有存储的目录,每一个目录都是由StorageDirectory

来管理,storageDirs代表着这个Storage所管理的所有的StorageDirectory,并通过DirIterator进行遍历。

本地存储信息是存储在VERSION文件里的,它包含了节点类型,layout版本,namespaceId,clusterId

本地存储可以存储在多个存储目录里面,每一个目录都包含相同的VERSION文件,hadoop启动的时候会会读取这些本地存储的文件信息

DataNode 对每一个存储目录持有一个锁,用于防止多个DataNode启动而修改这个共享存储目录

DataStorage:继承自Storage类,提供管理存储空间的功能。

在HDFS 联盟的模式下,一个DataNode可以保存多个命名空间的数据块,每一个命名空间在DataNode磁盘上都有一个独立的BlockPool

这个Pool会分布在DataNode所有存储目录下,他们共同保存了这个Pool在当前DataNode上的所有数据块。 HDFS定义了Block

PoolSliceStorage用于管理单个BlockPool的存储空间,DataStorage类定义了bpStorageMap字段保存DataNode上所有BlockPool的

BlockPoolSliceStorage对象的引用

DataNode在启动的时候,会调用DataStorage提供的方法初始化Data

Node的存储空间,在HDFS联盟架构中,DataNode会保存多个命名空间的数据块,对于每一个命名空间,DataNode都会构造一个BPOfferService类维护与这个命名空间NameNode的通信,当BPOfferService中的BPServiceActor类与该命名空间的NameNode握手成功以后,就会调用initBlockPool初始化该命名空间的BlockPool

DataStorage分析相关推荐

  1. Hadoop_NameNode_代码分析_目录树(2)

    (1)NameNode的内存中保存了庞大的目录树结构,这个结构用来保存文件目录结构和文件Block之间的映射,这种结构关系会固化在磁盘上,但是对树的改动频繁发生,什么时候将树写入磁盘呢?把每次操作应用 ...

  2. Android KitKat 外部存储权限分析

    不知道你有么有发现,来自菜鸟的成长史:http://blog.csdn.net/zjbpku/article/details/25161131, KitKat之后的版本不再支持用户对外置SDcard( ...

  3. Hadoop源代码分析

    http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...

  4. Hadoop源代码分析(完整图文版) part 1

    在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字:  ...

  5. DataNode启动流程源码分析

    我们都知道在Hadoop hdfs文件系统中,Datanode是负责hdfs文件对应的数据块存储管理的组件,其会在启动时向NameNode汇报其上拥有的数据块,以及周期性心跳并接收来自NameNode ...

  6. 第七章:小朱笔记hadoop之源码分析-hdfs分析 Datanode 心跳分析

    第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析 5.2 Datanode 心跳分析 (1)offerService分析 写道 (a)检查心跳间隔是否超时,如是向n ...

  7. Hadoop源码分析笔记(十一):数据节点--数据节点整体运行

    数据节点整体运行 数据节点通过数据节点存储和文件系统数据集,管理着保存在Linux文件系统上的数据块,通过流式接口提供数据块的读.写.替换.复制和校验信息等功能.建立在上述基础上的数据节点,还需要维护 ...

  8. 第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析

    第七章:小朱笔记hadoop之源码分析-hdfs分析 第五节:Datanode 分析 5.1 Datanode 启动过程分析 5.2 Datanode 心跳分析 5.3 Datanode 注册分析 5 ...

  9. Hadoop源代码分析(完整版)

    Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施.  GoogleCluster:http:/ ...

最新文章

  1. 计算机操作系统“进程”与“线程”的通俗解析
  2. 有关增强现实技术的过去、现在和未来的发展
  3. php或js判断网站访问者来自手机或者pc端源码
  4. Java多线程笔记(零):进程、线程与通用概念
  5. 看oracle 的数据库位数
  6. python控制台输出到文件_Python print 立即打印内容到重定向的文件
  7. JAVA_出神入化学习路线大纲
  8. 使用Webtask.io创建一个简单的REST API端点
  9. 华为nova5iotg功能使用_原来华为EMUI10输入法这么强大!使用这个功能,一分钟能打300字...
  10. hook 输入法 android,安卓输入法输入性能评测流程
  11. javaSE----进制
  12. 游戏 TRAP(SNRS)AlphaBeta版本
  13. 织梦网站如何上传服务器还原,织梦系统DedeCMS网站通过数据库备份、还原实现网站整站搬家移植...
  14. 学习《华为基本法》(6):公司的成长
  15. 几种常见的数据分析模型
  16. 如何显示计算机窗口的状态栏,如何让电脑任务栏不显示打开的程序或窗口方法...
  17. 群晖系统ftp服务器,群晖对接云服务器ftp
  18. xp系统打印机服务器报错,互联网要点:Win7系统连接XP共享打印机报错0X000004如何解决...
  19. Java架构师视频+授课资料
  20. 解决windows xp 局域网共享

热门文章

  1. 电脑计算机和算盘童话作文,消失的算盘作文
  2. php session传数组,php把数组存到session的方法
  3. python如何在文本内排序_在python中对文本文件中的项进行排序
  4. 04Linux与Unix的关系
  5. hyperworks安装教程linux,HyperWorks安装说明.ppt
  6. html 点击选择变色,JS实现菜单点击后变色
  7. 8cm等于多少像素_没诚意!红米Note 8 4800万像素是假的?网友:看看realme Q吧
  8. php sql 条件拼组_sql where查询拼接技巧
  9. vim命令模式和底线_人生苦短!老鸟带你用Vim偷懒!
  10. 如何验证登录oracle,Oracle登录验证方式详解