栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop源码分析(四)

Hadoop源码分析(四)

2021SC@SDUSC

1.Hadoop中的NameNode与DataNode

Hadoop中的HDFS系统包括一个NameNode和多个DataNode。NameNode为管理者,主要负责管理HDFS中的文件系统,它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。而DataNode负责存储数据,一个数据块在多个 DataNode 中有备份;而一个 DataNode 对于一个块最多只包含一个备份。

一个 HDFS 集群可能包含上千 DataNode 节点,这些 DataNode 定时和 NameNode 通信,接叐收NameNode 的指令。为了 减轻 NameNode 的负担,NameNode 上并不永久保存那个 DataNode 上有那些数据块的信息,而是通过 DataNode 启动定时上报,来更新 NameNode 上的映射表。 DataNode 当然也作为服务器接收来自客户端的访问,处理数据块读/写请求。DataNode 之间还会相互通信,执行数据块复制任务,同时,在客户端做写操作的时候,DataNode 需要相互配合,保证写操作的一致性。 从大到小,Hadoop 中最大的结构 是 Storage,最小的结构,在 DataNode 上是 block。 类 Storage 保存了和存储相关的信息,它继承了 StorageInfo。 StorageDirectory 还管理着文件系统的元信息,,StorageDirectory 还保存每个具体用途自己的信息。这些信息,其实都存储在 VERSION 文件中,StorageDirectory 中的 read/write 方法,就是用于对这个文件进行读/写。 DataNode配置文件的相关代码:
1. #Fri Nov 14 10:27:35 CST 2008 
2. namespaceID=1950997968 
3. storageID=DS-697414267-127.0.0.1-50010-1226629655026 
4. cTime=0 
5. storageType=DATA_NODE 
6. layoutVersion=-16

2.FSDataset 相关的类

FSDataset 实现了接口 FSDatasetInterface。FSDatasetInterface 是 DataNode 对底局存储的抽象。 FSDataset关键变量:
FSVolumeSet volumes;
 private HashMap ongoingCreates = new HashMap();
 private HashMap volumeMap = null;
volumes 就是 FSDataset 使用的所有 Storage,ongoingCreates 是 Block 刡 ActiveFile 的映射,只要是正在创建的 Block,都会记彔在 ongoingCreates 里。

FSDataset 中的方法:
public long getmetaDataLength(Block b) throws IOException;
得到一个 block 的元数据长度。通过 block 的 ID,找对应的元数据文件,返回文件长度。
public metaDataInputStream getmetaDataInputStream(Block b) throws IOException;
得到一个 block 的元数据输入流。通过 block 的 ID,找对应的元数据文件,在上面打开输入流。

public boolean metaFileExists(Block b) throws IOException;
判断 block 的元数据的元数据文件是否存在。
public long getLength(Block b) throws IOException;
求block 的长度。
public Block getStoredBlock(long blkid) throws IOException;
通过 Block 的 ID,找到对应的 Block。
public void updateBlock(Block oldblock, Block newblock) throws IOException;

更新Block。

public void unfinalizeBlock(Block b) throws IOException;

取消打开的Block。

public boolean isValidBlock(Block b);

判断Block是否有效。

public void validateBlockmetadata(Block b) throws IOException;

检查Block的有效性。

在本次代码分析中,增加了我对于Hadoop中DataNode与NameNode作用的理解,以及对FSDataset类里的代码作用的理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号