来源于源码阅读笔记。
前提:
• 机器故障是常态
• 文件不能丢失
• 需要对文件进行冗余的拷贝备份
思路:
• 不足拷贝数的:及时复制
• 超过拷贝数的:删除多余的
• 无效的:直接删除
几个常驻内存的队列
• 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
中选剩下空间最小的
分享到:
相关推荐
基于内存数据局部性的Hadoop调度策略优化,王佳琪,张雷,Hadoop平台被广泛应用于大规模计算领域,如数据挖掘、数据分析等。随着大数据应用多样化,很多应用对作业实时性要求越来越高。在作
在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 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo 的工程师 Doug Cutting 和 Mike Cafarella Hadoop 是一个处理、存储和分析海量的分布式、非结构化数据的开源框架。最初由 Yahoo...
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不...
本书从hadoop的缘起开始,由浅入深,结合理论和实践,全方位地介绍hado叩这一高性能处理海量数据集的理想工具。全书共14章,3个附录,涉及的主题包括:haddoop简介:mapreduce简介:hadoop分布式文件系统;hadoop的i...
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 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。...
hadoop2.7.3 Winutils.exe hadoop.dll
hadoop的dll文件 hadoop.zip
Hadoop 集群配置详解 Hadoop_Hadoop集群(第1期)_CentOS安装配置 Hadoop_Hadoop集群(第2期)_机器信息分布表 Hadoop_Hadoop集群(第4期)_SecureCRT使用 Hadoop_Hadoop集群(第5期)_Hadoop安装配置 Hadoop_Hadoop...
调用保存文件的算子,需要配置Hadoop依赖 将文件夹中的 hadoop-3.0.0 解压到电脑任意位置 在Python代码中使用os模块配置:os.environ[‘HADOOP_HOME’] = ‘HADOOP解压文件夹路径’ winutils.exe,并放入Hadoop解压...
Apache Hadoop (hadoop-3.3.4.tar.gz)项目为可靠、可扩展的分布式计算开发开源软件。官网下载速度非常缓慢,因此将hadoop-3.3.4 版本放在这里,欢迎大家来下载使用! Hadoop 架构是一个开源的、基于 Java 的编程...
Hadoop大数据资料集锦Hadoop大数据资料集锦Hadoop大数据资料集锦Hadoop大数据资料集锦
hadoop2.6.0 hadoop.dll包括winutils.exe
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合...
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-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
windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容 windows下做hadoop入门,会出现hdfs报错,2.7.7版本兼容
《Hadoop集群程序设计与开发(数据科学与大数据技术专业系列规划教材)》系统地介绍了基于Hadoop的大数据处理和系统开发相关技术,包括初识Hadoop、Hadoop基础知识、Hadoop开发环境配置与搭建、Hadoop分布式文件系统、...