hdfs FastCopy源码 copyBlock
1从srcnamenode获取到block的信息,2去dest addblock信息,3判断block进行拷贝,拷贝判断是不是同一个datanode,如果是进行硬链接拷贝。否进行复制数据
LocatedBlock存放文件的block信息,
通过DatanodeInfo[] getLocations()
获取包含了文件所在的DatanodeInfo
DatanodeInfo中包含节点信息favoredNodes[i] = srcLocatedBlock.getLocations()[i].getHostName()
+ ":" + srcLocatedBlock.getLocations()[i].getXferPort()
ClientDatanodeProtocolTranslatorPB实现ClientDatanodeProtocol接口,是Client跟DataNode的RPC通信类
ClientNamenodeProtocolTranslatorPB实现ClientProtocol接口,是Client跟NameNode的RPC通信类
+ @Override
+ public void copyBlock(ExtendedBlock src, ExtendedBlock dst, DatanodeInfo dstDn)
+ throws IOException {
+ if (!data.isValidBlock(src)) {
+ // block does not exist or is under-construction
+ String errStr = "copyBlock:(" + this.getInfoPort() + ") Can't send invalid block " + src
+ + " " + data.getReplicaString(src.getBlockPoolId(), src.getBlockId());
+ LOG.info(errStr);
+ throw new IOException(errStr);
+ }
+ long onDiskLength = data.getLength(src);
+ if (src.getNumBytes() > onDiskLength) {
+ // Shorter on-disk len indicates corruption so report NN the corrupt block
+ String msg = "copyBlock: Can't replicate block " + src
+ + " because on-disk length " + onDiskLength
+ + " is shorter than provided length " + src.getNumBytes();
+ LOG.info(msg);
+ throw new IOException(msg);
+ }
+ LOG.info(getDatanodeInfo() + " copyBlock: Starting thread to transfer: " +
+ "block:" + src + " from " + this.getDatanodeUuid() + " to " + dstDn.getDatanodeUuid() +
+ "(" +dstDn + ")");
+ Future<?> result;
+ if (this.getDatanodeUuid().equals(dstDn.getDatanodeUuid())) {//如果是同一个节点,则用hardLink硬拷贝
+ result = blockCopyExecutor.submit(new LocalBlockCopy(src, dst));
+ } else {
+ result = blockCopyExecutor.submit(new DataCopy(dstDn, src, dst));
+ }
+ try {
+ // Wait for 5 minutes.
+ result.get(5 * 60, TimeUnit.SECONDS);
+ } catch (Exception e) {
+ LOG.error(e);
+ throw new IOException(e);
+ }
+ }
hdfs FastCopy源码 copyBlock相关推荐
- Hadoop3.2.1 【 HDFS 】源码分析 Sender和Receiver解析
.......................................... 一.前言 二.调用流程 三.Sender类 四.Receiver 类 一.前言 DataTransferProto ...
- Hadoop3.2.1 【 HDFS 】源码分析 : BPOfferService 解析
................................................................................ 一.前言 二.BPOfferServi ...
- Hadoop3.2.1 【 HDFS 】源码分析 :FSDirectory类解析
Table of Contents 一.前言. 二.构造方法 三.常量 四.方法 一.前言. Namenode最重要的两个功能之一就是维护整个文件系统的目录树(即命名空间namesystem) . H ...
- Hadoop3.2.1 【 HDFS 】源码分析 : ZKFailoverController解析
List of articles 一.前言 二.启动入口 三. doRun 3.1.initZK 初始化ZK,构建连接信息 3.2.formatZK(force, interactive); 3.3. ...
- Ambari 及 hdp 相关源码地址汇总
点击卡片"大数据实战演练",选择"设为星标"或"置顶" 回复"资料"可领取独家整理的学习资料! 了解我的小伙伴都知道,我 ...
- Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
转自:http://www.it165.net/admin/html/201404/2726.html 本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口 ...
- HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系 ...
- HDFS源码分析心跳汇报之数据结构初始化
在<HDFS源码分析心跳汇报之整体结构>一文中,我们详细了解了HDFS中关于心跳的整体结构,知道了BlockPoolManager.BPOfferService和BPServiceActo ...
最新文章
- Java培训进阶书籍推荐,赶快收藏起来!
- TLS/HTTPS 证书生成与验证
- 【PAT乙级】1024 科学计数法 (20 分)
- 【学习笔记】HTTPS概述
- matlab径向分布函数作图_常见的概率分布(matlab作图)
- VTK:模型之MarchingCubes
- python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
- 《c语言从入门到精通》看书笔记——第11章 结构体和共用体
- spring在java工程中的运用
- 啊哈算法-擒贼先擒王(并查集)
- git进阶(撤销pull、撤销merge、撤销add)
- 李宏毅机器学习——深度学习的Tips
- Oracle DBLINK 简单使用
- linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
- [UWP/WPF]在应用开发中安全使用文件资源
- 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)
- 哈工大计算机网络Mooc 第八章笔记(网络层(中))
- windows服务器直播推流
- Vue3 - 组件通信(子传父)
- Windows安全日志
热门文章
- 学生党福利:毕业论文答辩课堂PPT模板
- Python-String模块
- HTML+CSS网页设计期末课程大作——轮滑运动-人物介绍主题(10页)
- 聚苯乙烯-SiO2/NiFe2O4磁性微球/中空介孔载银二氧化硅聚苯乙烯微球制备过程
- github上能找到中文博主吗_Python 画简易中文星座
- 我的世界服务器修复地图指令,如何利用NBTExplorer修复被循环命令方块无限kill的地图...
- SP1225F 5V/3.6A同步整流DC-DC降压IC,整套方案介绍
- 人工智能新技术——联邦学习的前世今生(上)
- LWN: 在Linux kernel里应用profile-guided optimization!
- r5 4650g和r7 4750g核显对比 r5 4650g和4750g差距大不大