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相关推荐

  1. Hadoop3.2.1 【 HDFS 】源码分析 Sender和Receiver解析

    .......................................... 一.前言 二.调用流程 三.Sender类 四.Receiver 类 一.前言 DataTransferProto ...

  2. Hadoop3.2.1 【 HDFS 】源码分析 : BPOfferService 解析

    ................................................................................ 一.前言 二.BPOfferServi ...

  3. Hadoop3.2.1 【 HDFS 】源码分析 :FSDirectory类解析

    Table of Contents 一.前言. 二.构造方法 三.常量 四.方法 一.前言. Namenode最重要的两个功能之一就是维护整个文件系统的目录树(即命名空间namesystem) . H ...

  4. Hadoop3.2.1 【 HDFS 】源码分析 : ZKFailoverController解析

    List of articles 一.前言 二.启动入口 三. doRun 3.1.initZK 初始化ZK,构建连接信息 3.2.formatZK(force, interactive); 3.3. ...

  5. Ambari 及 hdp 相关源码地址汇总

    点击卡片"大数据实战演练",选择"设为星标"或"置顶" 回复"资料"可领取独家整理的学习资料! 了解我的小伙伴都知道,我 ...

  6. Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)

    一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...

  7. HDFS追本溯源:HDFS操作的逻辑流程与源码解析

    转自:http://www.it165.net/admin/html/201404/2726.html 本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口 ...

  8. HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

    在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系 ...

  9. HDFS源码分析心跳汇报之数据结构初始化

    在<HDFS源码分析心跳汇报之整体结构>一文中,我们详细了解了HDFS中关于心跳的整体结构,知道了BlockPoolManager.BPOfferService和BPServiceActo ...

最新文章

  1. Java培训进阶书籍推荐,赶快收藏起来!
  2. TLS/HTTPS 证书生成与验证
  3. 【PAT乙级】1024 科学计数法 (20 分)
  4. 【学习笔记】HTTPS概述
  5. matlab径向分布函数作图_常见的概率分布(matlab作图)
  6. VTK:模型之MarchingCubes
  7. python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
  8. 《c语言从入门到精通》看书笔记——第11章 结构体和共用体
  9. spring在java工程中的运用
  10. 啊哈算法-擒贼先擒王(并查集)
  11. git进阶(撤销pull、撤销merge、撤销add)
  12. 李宏毅机器学习——深度学习的Tips
  13. Oracle DBLINK 简单使用
  14. linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
  15. [UWP/WPF]在应用开发中安全使用文件资源
  16. 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)
  17. 哈工大计算机网络Mooc 第八章笔记(网络层(中))
  18. windows服务器直播推流
  19. Vue3 - 组件通信(子传父)
  20. Windows安全日志

热门文章

  1. 学生党福利:毕业论文答辩课堂PPT模板
  2. Python-String模块
  3. HTML+CSS网页设计期末课程大作——轮滑运动-人物介绍主题(10页)
  4. 聚苯乙烯-SiO2/NiFe2O4磁性微球/中空介孔载银二氧化硅聚苯乙烯微球制备过程
  5. github上能找到中文博主吗_Python 画简易中文星座
  6. 我的世界服务器修复地图指令,如何利用NBTExplorer修复被循环命令方块无限kill的地图...
  7. SP1225F 5V/3.6A同步整流DC-DC降压IC,整套方案介绍
  8. 人工智能新技术——联邦学习的前世今生(上)
  9. LWN: 在Linux kernel里应用profile-guided optimization!
  10. r5 4650g和r7 4750g核显对比 r5 4650g和4750g差距大不大