DataNode之DirectoryScanner分析
DirectoryScanner的作用就是定期扫描磁盘上的数据块,检查磁盘数据块信息是否和FsDataSetImpl的数据块信息一致,如果不一致则进行更新,他只会检查内存和磁盘上FINALIZED状态的数据块是否一致
比较核心的字段:
异步收集磁盘上数据块信息的线程池
privatefinal ExecutorServicereportCompileThreadPool;
主线程,定期调用run方法,执行整个扫描逻辑
privatefinal ScheduledExecutorServicemasterThread;
描述磁盘上保存的数据块信息和内存之间差异,在扫描过程中更新,扫描结束后,把diffs更新到FsDatasetImpl
final ScanInfoPerBlockPooldiffs = newScanInfoPerBlockPool();
voidstart() {
shouldRun = true;
long offset = DFSUtil.getRandom().nextInt((int) (scanPeriodMsecs/1000L)) * 1000L; //msec
long firstScanTime = Time.now() +offset;
//定期调用这个线程类,然后执行这个类的run方法
masterThread.scheduleAtFixedRate(this,offset, scanPeriodMsecs,
TimeUnit.MILLISECONDS);
}
public voidrun() {
//......
reconcile();
//......
}
/**
*调节磁盘上和内存上数据块的不同
*/
voidreconcile() throws IOException {
//在磁盘和内存的blocks扫描不同,只是扫描那些FINALIZED标记的数据块
scan();
for (Entry<String, LinkedList<ScanInfo>>entry : diffs.entrySet()) {
Stringbpid = entry.getKey();
//遍历差异信息
LinkedList<ScanInfo>diff = entry.getValue();
//更新FsDataset保存的数据块
for (ScanInfo info :diff) {
dataset.checkAndUpdate(bpid,info.getBlockId(),info.getBlockFile(),
info.getMetaFile(),info.getVolume());
}
}
if (!retainDiffs)clear();
}
DataNode之DirectoryScanner分析相关推荐
- DataNode之BlockSender分析
一 BlockSender发送数据的格式详解 BlockSender主要负责从DataNode的磁盘读取数据块,然后发送数据块到接收方.需要注意的是,BlockSender发送的数据是以一定的结构组织 ...
- DataNode进入Stale状态问题排查
先说下DataNode为啥会处于Stale状态 默认情况下,DataNode每3s向NameNode发送一次心跳,如果NameNode持续30s没有收到心跳,就把DataNode标记为Stale状态: ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- Hadoop源代码分析(完整图文版) part 1
在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字: ...
- 小朱笔记之hadoop应用实战、源码分析-目录
小朱笔记之hadoop应用实战.源码分析 1.1 背景目的 该笔记从宏观架构.安装配置.源码分析.使用案例四个方面剖析了Hadoop1.0.3,希望能对同学们提供帮助,赠人玫瑰,手留余香.能够把had ...
- Hdfs NameNode中数据块管理与数据节点管理分析
数据块管理 在上一节介绍了BlockManager中的数据块副本状态,主要是保存各个数据块副本状态的存储对象.名字节点第二关系的管理包括数据块管理和数据节点管理,其对数据块的管理是依托于BlockMa ...
- Hadoop源代码分析(完整版)
Hadoop源代码分析(一) 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http:/ ...
- Hadoop的学习笔记(Hive|pig|zookeeper|hbase)
轉載的,此筆記的鏈接地址請點擊此處 hadoop笔记本 <div class="postText"><div id="cnblogs_post_body ...
- 大数据开发工程师目录
阶段一:走进大数据 第1周 学好大数据先攻克Linux 在步入大数据殿堂之前,先带领大家快速掌握大数据的必备技能:Linux的操作使用,为后面学习大数据技术打下坚实基础. 课程安排: 1.掌握Li ...
最新文章
- python如何定义类_Python 面向对象
- LSTM终获「正名」,IEEE 2021神经网络先驱奖授予LSTM提出者Sepp Hochreiter
- 上传数据,直接分析,这才是真正的生物云
- DevOps和容器:本地or云端,如何选择?
- 桌面桌面虚拟化-Vmware 兼容性怎么查询
- 2019信安国赛逆向easyGo,bbvvmm题解
- spring源码分析第三天------spring核心IOC容器和依赖注入原理
- Web前端笔记-2D图形平面内平移定位(two.js)
- DD-WRT基础扫盲
- 论文笔记:微表情识别综述1
- 史上最全最准的支付行业常用名词解释精选
- 抽象代数笔记-群、子群、商群
- 链队列——-链式存储实现队列的入队出队(带next,front,rear指针)
- 解决react项目启动报错:error Couldn't find a package.json
- HTML+CSS一篇文章搞定
- 什么是UEFI启动?
- MAX98390CEWX D类放大器,集成动态扬声器管理(MAX98390)
- 通过window.open下载pdf或直接打开文件
- 笔记 | 数据分析产品未来范式的小结(增强分析、智能交互等)
- java 获取字符串最后的数字
热门文章
- JavaScript变量高级定义之Object.defineProperty()方法讲解
- android开发所遇问题集(一)----Mr.Zhang
- android 获取cpu型号_当贝投影带你认识投影仪CPU芯片有哪些?网友:真详细
- Mybatis plus 开启日志
- windows更改pip源_windows环境下 更换pip镜像源
- 左侧栏下拉框HTML代码,html5下拉菜单代码
- linux查看后台执行的所有任务与对应的命令
- php.ini 没有pdo,php.ini 没有pdo怎么办
- vant在cell中加表格_Vant Cell 单元格
- 软件测试计划和测试报告