`
Fire_Balrog
  • 浏览: 19498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Hadoop Replication策略

阅读更多

来源于源码阅读笔记。

 

 

前提:

• 机器故障是常态 

• 文件不能丢失 

• 需要对文件进行冗余的拷贝备份

 

 

思路:

• 不足拷贝数的:及时复制 

• 超过拷贝数的:删除多余的 

• 无效的:直接删除

 

 

几个常驻内存的队列

•  NeededReplications 

    需要进行replicate blocks 

•  PendingReplications 

    正在进行replicate blocks 

•  ExcessReplicateMap 

    超过Replicator 数的 blocks 

•  RecentInvalidateSets 

当前状态是失效的blocks

 

 

UnderReplicatedBlocks

•  NeededReplications所属的类 

• 保存所有当前需要 Replicate block 信息

• 每个 Block 都有不同的 Replicate 优先级 

    0为最高 

    4表示不需要进行 Replica

优先级队列
            0                              只有一个 Replica block
            1                      当前 Replica*3< 期望 Replica 数的 block
            2                                         其他
            3                        所有 Replica 都在一个 Rack block 

 

 

PendingReplications
• 正在等待 DataNode 进行 Replicate blocks
 • pendingReplicationMonitor线程对其进行监视
 • 监视超时仍未 Replicate 完成的 block
 • 超时设置为      dfs.replication.pending.timeout.sec

 

 

PendingReplicationMonitor
 •  NameNode 收到 blockReceive 的信息,将对应等待 replica block 移除,表示 replicate 成功

 • 当发现超时的 block ,将其加入 timeoutItems 队列
 ReplicationMonitor
• 独立的线程执行主要的 Replicate 工作
• 间隔:  dfs.replication.interval      默认 3
•  computedDatanodeWork
               – computeDatanodeWork 
               – processPendingReplications

 

 

ComputeDatanodework
• 执行 block replication invalidateion
• 具体的操作将于下次 heartbeat 时被通知到相对应的 datanode
•  Safemode时不执行
• 几个参数:
    – blockToProcess:一次工作最多能 replicate block 个数
      heartbeatSize * REPLICATION_WORK_MULTIPLIE_PRE_ITERATION(默认为 2 ,即活着 dn 的两倍)
    – nodesToProcess:一次工作最多进行 invalidate dn 个数
      heartbeatSize*INVALIDATE_WORK_PCT_PRE_ITERATION (默认为 32% ,即 1/3 dn
    – workFound:如果没有需要 Replicate block ,则执行  invalidation

      ( Heartbeat.size()实际是当前收到的所有 heartbeat 的数目,即活着的 dn 的个数 )

 

执行步骤
•  (1)获取一个 srcNode  即发起 replicate datanode
•  (2)排除已经在 pending 并且个数足够的 replica
•  (3)选取一个 TargetNode  即需要将 replica 传输至 的 datanode
•  (4)更新 srcNode NameNode 中的信息,加入 replicatedblocks 对象与 targetNode
•  (5)更新 targetNode curApproxBlocksScheduled 信息
•  (6)最后将此 block needed 队列移除,加入  pending 队列

( TSP问题,实际是按照树的深度之和,计算两个 dn 距离,利用两次循环(选择排序)得出 pipeline )

 

 

获取srcNode 的算法
• 期望:获取一个正处于  DECOMMISION_INPROGRESS 状态的 datanode
   原因:最不忙(没有写的traffic
• 不使用已经 decommissioned datanode
• 如果都不满足,则随机选择一个为达到  replication limit datanode

 

computeInvalidateWork流程
• 处理 recentInvalidateSets 队列中已经失效的 block
   recentInvalidateSets: TreeSet<DN,list<block>>
• 共执行 nodesToProcess 次循环
• 每次循环,取出头一个 DN 对应的 blocklist
• 从中取出不超过 blockInvalidateLimit block
   blockInvalidateLimit = max(100, 20 * heartbeatinterval / 1000)
• 剩余的继续放回队列中
• 将选出的 block 更新进对应的 datanode

 

 

ProcessPendingReplications
• 处理超时的 replica
• 循环 timeoutItems 中的对象,将其重新放回 needed 队列

 

 

DataNode heartbeat 后的工作

•  生成 replicate command (DNA_TRANSFER) 

   maxReplicationStreams      –    xmitsInProgress 
   (dfs.max-repl-streams,2)        (并发的 xceriver 个数, dn threadGroup.activeCount)

•  生成 invalidate command  (DNA_INVALIDATE)     

   blockInvalidateLimit
   max(100, 20 * heartbeatInterval / 1000 )
   heartbeat频率的 20 倍,即一次最多 20


 NeededReplications更新

(每隔(dfs.namenode.decommission.interval,30) * 1000 间隔检测一次)
•  1.NameNode启动, leave safemode
•  2.Decommission Manager线程,检测处于 Decommission 状态的 datanode(1)
•  3.File complete
•  4.checkLease Manager

 

RecentInvalidate更新
•  1.Excess Replica
•  2.setReplica 变小
•  3.blockReport通知
•  4.删除文件
•  5.DiskError

 

 

ExcessReplicateMap
• 保存超过 Replica 数的 block
• 每当某 datanode 加入一个新的 block ,选择另外一个 datanode(1) ,并将其加入
   recentInvalidate队列,等待删除
• 更新时刻:
     – setRep 变小
     – addStroedBlock 

• 算法:
  传入的参数是nonExcess list
  1.从所有的 datanodes 中,生成一个 map<Rack,list<dn>>;
  2. map 中分为两个集合 priSet (多于一个 dn Rack ), remains (仅有一个的)
  3.先保证满足 delHint( 只有 blockReport 给出 )
  4. priSet 中选剩下空间最小的
  5. remain 中选剩下空间最小的


1
0
分享到:
评论

相关推荐

    论文研究-基于内存数据局部性的Hadoop调度策略优化 .pdf

    基于内存数据局部性的Hadoop调度策略优化,王佳琪,张雷,Hadoop平台被广泛应用于大规模计算领域,如数据挖掘、数据分析等。随着大数据应用多样化,很多应用对作业实时性要求越来越高。在作

    hadoop2.7.3 hadoop.dll

    在windows环境下开发hadoop时,需要配置HADOOP_HOME环境变量,变量值D:\hadoop-common-2.7.3-bin-master,并在Path追加%HADOOP_HOME%\bin,有可能出现如下错误: org.apache.hadoop.io.nativeio.NativeIO$Windows....

    《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf

    《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf《Hadoop大数据开发实战》教学教案—01初识Hadoop.pdf...

    Hadoop下载 hadoop-2.9.2.tar.gz

    Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...

    Hadoop下载 hadoop-3.3.3.tar.gz

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...

    Hadoop权威指南 中文版

    本书从hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍hado叩这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:haddoop简介:mapreduce简介:hadoop分布式文件系统;hadoop的i...

    hadoop最新版本3.1.1全量jar包

    hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...

    hadoop_tutorial hadoop入门经典

    hadoop_tutorial hadoop入门经典 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。...

    hadoop2.7.3 Winutils.exe hadoop.dll

    hadoop2.7.3 Winutils.exe hadoop.dll

    hadoop的dll文件 hadoop.zip

    hadoop的dll文件 hadoop.zip

    Hadoop集群pdf文档

    Hadoop 集群配置详解 Hadoop_Hadoop集群(第1期)_CentOS安装配置 Hadoop_Hadoop集群(第2期)_机器信息分布表 Hadoop_Hadoop集群(第4期)_SecureCRT使用 Hadoop_Hadoop集群(第5期)_Hadoop安装配置 Hadoop_Hadoop...

    hadoop配置资源 ,hadoop-3.0.0,hadoop.dll,winutils

    调用保存文件的算子,需要配置Hadoop依赖 将文件夹中的 hadoop-3.0.0 解压到电脑任意位置 在Python代码中使用os模块配置:os.environ[‘HADOOP_HOME’] = ‘HADOOP解压文件夹路径’ winutils.exe,并放入Hadoop解压...

    hadoop-3.3.4 版本(最新版)

    Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...

    Hadoop大数据资料集锦

    Hadoop大数据资料集锦Hadoop大数据资料集锦Hadoop大数据资料集锦Hadoop大数据资料集锦

    hadoop2.6.0 hadoop.dll包括winutils.exe

    hadoop2.6.0 hadoop.dll包括winutils.exe

    hadoop-3.1.3安装包

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合...

    hadoop的hadoop.dll和winutils.exe

    hadoop hadoop的hadoop.dll和winutils.exe 解决方法, 把winutils.exe加入你的hadoop-x.x.x/bin下 Could not locate executable null\bin\winutils.exe in the Hadoop binaries

    Hadoop多版本 hadoop.dll和winutils.exe 下载

    支持如下版本的Hadoop hadoop-2.6.0 hadoop-2.6.3 hadoop-2.6.4 hadoop-2.7.1 hadoop-2.8.1 hadoop-2.8.3 hadoop-3.0.0

    windows64位hadoop2.7.7版本hadoop.dll

    windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容

    Hadoop集群程序设计与开发

    《Hadoop集群程序设计与开发(数据科学与大数据技术专业系列规划教材)》系统地介绍了基于Hadoop的大数据处理和系统开发相关技术,包括初识Hadoop、Hadoop基础知识、Hadoop开发环境配置与搭建、Hadoop分布式文件系统、...

Global site tag (gtag.js) - Google Analytics