IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop源码分析(五) -> 正文阅读

[大数据]Hadoop源码分析(五)

2021SC@SDUSC

1.DataXceiver

OP_READ_METADATA :读数据块元文件
OP_REPLACE_BLOCK :替换一个数据块
OP_COPY_BLOCK :拷贝一个数据块
OP_BLOCK_CHECKSUM :读数据块检验码
替换一个数据块是系统平衡操作的一部分,用于接收一个数据块。它和普通的数据块写的差别是,它只发生在两个节点上,一个写,一个读,而不需要建立数据链。
1. blockReceiver = new BlockReceiver(block, proxyReply, 
2. proxySock.getRemoteSocketAddress().toString(), 
3. proxySock.getLocalSocketAddress().toString(), 
4. false, "", null, datanode); //OP_REPLACE_BLOCK 
5. blockReceiver = new BlockReceiver(block, in, 
6. s.getRemoteSocketAddress().toString(), 
7. s.getLocalSocketAddress().toString(), 
8. isRecovery, client, srcDataNode, datanode);
写数据块収起请求方也提供数据,替换数据块请求方不提供数据,而是提供了一个数据源(proxySource 参数),由 replaceBlock 収起一个拷贝数据块的请求,建立数据源。
isRecovery=false,client=””, srcDataNode=null 即完成拷贝数据库操作。
在创建 BlockReceiver 对象前,需要使用拷贝数据块的请求建立到数据源的 socket 连接并收送拷贝数据块请求。然后通过 BlockReceiver.receiveBlock 接收数据。任务成功后将结果通知 notifyNamenodeReceivedBlock。
2.DataBlockScanner
DataBlockScanner 拥有它单独的线程,能定时地从目前 DataNode 管理的数据块文件进行校验。其实最重要的方法就是verifyBlock,其代码如下:
blockSender = newBlockSender(block, 0, -1, false, false, true, datanode); 
  
DataOutputStream out = newDataOutputStream(newIOUtils.NullOutputStream());   

blockSender.sendBlock(out, null, throttler);  
校验利用了BlockSexder。在BlockSender 中,收送数据的同时,会对数据进行校验。 verifyBlock 需要读一个Block到一个空输出设备( NullOutputStream ),如果有异常,那么校验失败,如果正常,校验成功
?
DataBlockScanner其他的辅助方法用于对 DataBlockScanner 管理的数据块文件信息进行增加 /删 除,排序操作。同时,校验的信息还会保持在Storage 上。
3.FSDirectory
FSDirectory只有很少的成员变量:
 final FSNamesystem namesystem;
 final INodeDirectoryWithQuota rootDir;
 FSImage fsImage;
 boolean ready = false;
其中,namesystem,fsImage 是指向 FSNamesystem 对象和 FSImage 对象的引用,rootDir 是文件系统的根,ready 初值为 false,当系统成功加载 FSImage 以后,ready 会变成 true,FSDirectory 的使用者就可以调用其它 FSDirectory 功能了。
FSDirectory中的loadFSImage 用于加载目彔树结构,它会去调用 FSImage 的方法,完成持久化信息的导入以后,它会把成员变量 ready设 置为 true。系统调用 loadFSImage 是FSNamesystem.java 的 initialize 方法,那是系统初始化重要的一步。
addFile 用于创建文件或追加数据时创建 INodeFileUnderConstruction;
addFile 首先会试图在系统中创建到文件的路径,如果文件为/home/hadoop/Hadoop.tar,addFile 会调用 mkdirs保证文件路徂存在,然后创建 INodeFileUnderConstruction 节点,并把该节点加到目录树中,如果成功,就写操作日志。
addBlock 和 removeBlock 对应,用于添加/删除数据块信息,同时它们还需要更新 FSNamesystem.java 中对应的信息。
unprotectedRenameTo 和 renameTo 实现了 UNIX 的 mv 命令,主要的功能都在 unprotectedRenameTo 中完成,复杂的地方在于对各种各样情况的讨论。
4.DataNode(补充一)
public class DataNode extends Configured

implements InterDatanodeProtocol, ClientDatanodeProtocol, FSConstants, Runnable

DataNode 的继承关系中,我们发现,DataNode 实现了两个通信接口,其中 ClientDatanodeProtocol 是用于和 Client 交互的,InterDatanodeProtocol,就是我们前面提到的 DataNode 间的通信接口。ipcServer(类图的左下方)是DataNode 的一个成员发量,它启动了一个 IPC 服务,这样,DataNode 就能提供 ClientDatanodeProtocol 和 InterDatanodeProtocol的服务。

main函数调用了 createDataNode 的方法,然后就等着 DataNode 的线程结束。createDataNode 首先调用 instantiateDataNode 初始化 DataNode,然后执行runDatanodeDaemon。
runDatanodeDaemon 会向 NameNode 注册,如果成功,才启动DataNode 线程,DataNode 就开始工作了。
初始化 DataNode 的方法 instantiateDataNode 会读取?DataNode 需要的配置文件,同时读取配置的 storage 目录,然后把返两参数送到?makeInstance 中,makeInstance 会先检查目录,然后调用:
new DataNode(conf, dirs);
构造函数调用 startDataNode,完成和 DataNode 相关的初始化工作。下一步是检查文件系统的状态并做必要的恢复,并初始化 FSDataset。
在本次代码分析中,我学习到了FSDirectory里的代码构造以及DataXceiver和DataBlockScanner 在Hadoop中的作用。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:37:22  更:2021-11-09 19:39:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:42:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码