HDFS2.6.0源码分析
文章平均质量分 84
lipeng_bigdata
这个作者很懒,什么都没留下…
展开
-
HDFS源码分析心跳汇报之数据块增量汇报
数据块增量汇报是负责向NameNode发送心跳信息工作线程BPServiceActor中周期性的一个工作,它负责向NameNode及时汇报DataNode节点上数据块的变化情况,比如数据块正在接收、已接收或者已被删除。它的工作周期要小于正常的数据块汇报,目的就是为了能够让NameNode及时掌握DataNode上数据块变化情况,以便HDFS系统运行正常,略显机智!而且,当数据块增量汇报不成功时,下一个循环会接着立即发送数据块增量汇报,而不是等其下一个周期的到来,这显示了HDFS良好的容错性,是一个值得我们借原创 2016-03-19 11:36:48 · 3668 阅读 · 0 评论 -
HDFS源码分析数据块汇报之损坏数据块检测checkReplicaCorrupt()
无论是第一次,还是之后的每次数据块汇报,名字名字节点都会对汇报上来的数据块进行检测,看看其是否为损坏的数据块。那么,损坏数据块是如何被检测的呢?本文,我们将研究下损坏数据块检测的checkReplicaCorrupt()方法。原创 2016-04-14 09:23:39 · 3070 阅读 · 0 评论 -
HDFS源码分析之LightWeightGSet
LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组存储元素,数组中存储的元素实际上是一个链表,这样,综合利用了数组、链表的优势,取长补短、相互促进。它利用long类型的blockId,采用一定的算法来定位元素在数组中的位置,并将其添加到列表头部,删除与查询亦是类似定位过程。原创 2016-04-14 16:38:31 · 7504 阅读 · 1 评论 -
HDFS源码分析数据块校验之DataBlockScanner
DataBlockScanner是运行在数据节点DataNode上的一个后台进程,它负责管理所有块池的数据块扫描工作。当数据节点DataNode发送心跳给名字节点NameNode进行数据块汇报并执行完返回的命令时,会在DataBlockScanner的内部集合blockPoolScannerMap中注册块池ID与为此新创建的BlockPoolSliceScanner对象的关系,然后DataBlockScanner内部线程blockScannerThread周期性的挑选块池currentBpId,并获取块池切原创 2016-04-27 10:43:38 · 12713 阅读 · 0 评论 -
HDFS源码分析数据块复制监控线程ReplicationMonitor(一)
ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列。原创 2016-04-15 23:06:06 · 2076 阅读 · 0 评论 -
HDFS源码分析之FSImage文件内容(一)总体格式
FSImage文件是HDFS中名字节点NameNode上文件/目录元数据在特定某一时刻的持久化存储文件。它的作用不言而喻,在HA出现之前,NameNode因为各种原因宕机后,若要恢复或在其他机器上重启NameNode,重新组织元数据,就需要加载对应的FSImage文件、FSEditLog文件,并在内存中重做FSEditLog文件中的事务条目。本节,我们先来看下FSImage文件格式,及其内部数据是如何组织的。原创 2016-04-29 10:03:46 · 13947 阅读 · 0 评论 -
HDFS源码分析之UnderReplicatedBlocks(二)
UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块。它是UnderReplicatedBlocks的内部类。原创 2016-04-15 17:07:25 · 2616 阅读 · 0 评论 -
HDFS源码分析数据块复制监控线程ReplicationMonitor(二)
HDFS源码分析数据块复制监控线程ReplicationMonitor(二)原创 2016-04-17 16:04:06 · 745 阅读 · 0 评论 -
HDFS源码分析数据块复制选取复制源节点
数据块的复制当然需要一个源数据节点,从其上拷贝数据块至目标数据节点。那么数据块复制是如何选取复制源节点的呢?本文我们将针对这一问题进行研究。在BlockManager中,chooseSourceDatanode()方法就是用来选取数据块复制时的源节点的,它负责解析数据块所属数据节点列表,并选择一个,用它作为数据块的复制源。其核心逻辑如下:根据block从blocksMap中取数据块所在数据节点存储实例集合并遍历,统计数据块副本情况,包括损坏副本、多余副本、退役副本、活跃副本等,然后损坏副本、多余副本、退役节原创 2016-04-17 22:13:06 · 2528 阅读 · 0 评论 -
HDFS源码分析之UnderReplicatedBlocks(一)
UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据结构。在HDFS的高性能、高容错性体系中,总有一些原因促使HDFS系统内进行块复制工作,比如基于高性能的负载均衡、基于容错性的数据块副本数恢复等。那么,任何工作都会有一个优先级的问题,特别是这里的数据块复制,不可能简单的按照先入先出或者其他简单策略,比方说,基于容错性的数据块副本数恢复,特别是数据块副本仅有一个的数据块副本数恢复,其优先级肯定要比基于高性能的负载均衡高,所以数据块复制要有个优先级的概念,那么,数据块复制的优先级怎么原创 2016-04-15 14:18:38 · 10475 阅读 · 0 评论 -
container-executor.cfg文件及其各级父路径问题解决方案
一、背景 为了增加Hadoop CGroup来限制部分作业对CPU的占用,近日在搭建Hadoop-2.6.0的CGroup过程中,碰到了以下一个问题,提示如下(注:500为用户hadoop的id号):File /opt/hadoop/hadoop-2.6.0/etc/hadoop/container-executor.cfg must be owned by root, but is o原创 2016-09-28 09:37:40 · 5090 阅读 · 2 评论 -
Hadoop-2.6.0 DFSClient Hedged Read实现分析
一、简介 DFSClient Hedged Read是Hadoop-2.4.0引入的一个新特性,如果读取一个数据块的操作比较慢,DFSClient Hedged Read将会开启一个从另一个副本的hedged读操作。我们会选取首先完成的操作,并取消其它操作。这个Hedged读特性将有助于控制异常值,比如由于命中一个坏盘等原因而需要花费较长时间的异常阅读等。二、开启 DFSCli原创 2016-11-29 18:05:19 · 3935 阅读 · 0 评论 -
HDFS Archival Storage
一、是什么二、怎么做 1、标记DataNode存储属性 2、重启DataNode 3、标记或查看HDFS路径存储策略 4、迁移数据 5、检查文件数据块三、测试四、我们可以用来做什么一、是什么 随着数据的日益增长,很多数据由热变冷,已经不再或者很少使用,而数据的存储需求越来越大,计算需求则相应增长不大。如何解耦这种急剧增长的存储需求和计算需原创 2016-12-01 14:45:25 · 2035 阅读 · 0 评论 -
Hadoop-2.7.0中HDFS NameNode HA实现之DFSZKFailoverController、ZKFailoverController(一)
一、简介 DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA实现的中心组件,它负责整体的故障转移控制等。它是一个守护进程,通过main()方法启动,继承自ZKFailoverController。二、实现流程 1、启动 通过main()方法启动,如下: /** * 进程启动的main()方法 */原创 2016-12-14 14:40:29 · 15637 阅读 · 0 评论 -
Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现之DFSPacket
一、简介 HDFS在数据传输过程中,针对数据块Block,不是整个block进行传输的,而是将block切分成一个个的数据包进行传输。而DFSPacket就是HDFS数据传输过程中对数据包的抽象。二、实现 HDFS客户端在往DataNodes节点写数据时,会以数据包packet的形式写入,且每个数据包包含一个包头,n个连续的校验和数据块checksum chunks和n个连续的原创 2016-12-20 17:18:52 · 3099 阅读 · 0 评论 -
HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState
HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState,名字节点NameNode内存中文件系统树中的数据块一共有四种状态,数据节点DataNode内存中数据块副本一共有五种状态。原创 2016-04-13 18:20:36 · 3428 阅读 · 0 评论 -
HDFS源码分析之数据块Block、副本Replica
我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica。那么,什么是Block?什么又是Replica?原创 2016-04-13 17:02:47 · 3852 阅读 · 0 评论 -
HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
在《HDFS源码分析心跳汇报之数据结构初始化》一文中,我们了解到HDFS心跳相关的BlockPoolManager、BPOfferService、BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的。那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程。原创 2016-03-19 17:22:01 · 2603 阅读 · 1 评论 -
HDFS源码分析心跳汇报之数据块汇报
在《HDFS源码分析心跳汇报之数据块增量汇报》一文中,我们详细介绍了数据块增量汇报的内容,了解到它是时间间隔更长的正常数据块汇报周期内一个smaller的数据块汇报,它负责将DataNode上数据块的变化情况及时汇报给NameNode。那么,时间间隔更长的正常数据块汇报都做了些什么呢?本文,我们将开始研究下时间间隔更长的正常数据块汇报。 首先,看下正常数据块汇报是如何发起的?我们原创 2016-03-19 17:23:03 · 2692 阅读 · 0 评论 -
HDFS源码分析心跳汇报之DataNode注册
HDFS源码分析心跳汇报之DataNode注册,近期推出!原创 2016-03-19 17:37:32 · 962 阅读 · 0 评论 -
HDFS源码分析心跳汇报之周期性心跳
HDFS源码分析心跳汇报之周期性心跳,近期推出!原创 2016-03-19 17:42:02 · 1045 阅读 · 0 评论 -
HDFS源码分析之DataXceiverServer
DataXceiverServer是Hadoop分布式文件系统HDFS的从节点--数据节点DataNode上的一个后台工作线程,它类似于一个小型的服务器,被用来接收数据读写请求,并为每个请求创建一个工作线程以进行请求的响应。原创 2016-03-08 16:31:54 · 5904 阅读 · 1 评论 -
HDFS源码分析DataXceiver之整体流程
在《HDFS源码分析之DataXceiverServer》一文中,我们了解到在DataNode中,有一个后台工作的线程DataXceiverServer。它被用于接收来自客户端或其他数据节点的数据读写请求,为每个数据读写请求创建一个单独的线程去处理。而处理每次读写请求时所创建的线程,就是本文要讲的DataXceiver。本文,我们来看下DataXceiver的具体实现,着重讲解下它得到数据读写请求后的整体处理流程。原创 2016-03-08 17:32:33 · 2881 阅读 · 0 评论 -
HDFS源码分析心跳汇报之整体结构
我们知道,Hadoop2.x版本中,做了两个比较大的改动:一是引入了联邦的概念,允许一个HDFS集群提供多个命名空间服务,第二个是利用HA解决了NameNode单点故障问题,引入了Active NN和Standby NN的概念。本篇文章,结合Hadoop2.6.0的源码,我们先来看下心跳汇报的整体结构。原创 2016-03-14 14:42:55 · 2740 阅读 · 1 评论 -
HDFS源码分析心跳汇报之数据结构初始化
在《HDFS源码分析心跳汇报之整体结构》一文中,我们详细了解了HDFS中关于心跳的整体结构,知道了BlockPoolManager、BPOfferService和BPServiceActor三者之间的关系。那么,HDFS心跳相关的这些数据结构,都是如何被初始化的呢?本文,我们就开始研究HDFS心跳汇报之数据结构初始化。原创 2016-03-14 17:26:25 · 2168 阅读 · 1 评论 -
HDFS源码分析之EditLogTailer
EditLogTailer是一个编辑日志edit log的追踪器,它的主要作用就是当NameNode处于standby状态时用于从共享的edit log读取数据。原创 2016-04-11 22:41:37 · 2678 阅读 · 0 评论 -
HDFS源码分析EditLog之获取编辑日志输入流
在《HDFS源码分析之EditLogTailer》一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的实现,及其线程完成编辑日志跟踪所依赖的最重要的方法,执行日志追踪的doTailEdits()方法。在该方法的处理流程中,首先需要从编辑日志editLog中获取编辑日志输入流集合streams,获取的输入流为最新事务ID加1之后的数据。那么这个编辑日志输入流集合streams是如何获取的呢?本文我们将进行详细研究。原创 2016-04-12 11:01:16 · 5241 阅读 · 0 评论 -
HDFS源码分析EditLog之读取操作符
在《HDFS源码分析EditLog之获取编辑日志输入流》一文中,我们详细了解了如何获取编辑日志输入流EditLogInputStream。在我们得到编辑日志输入流后,是不是就该从输入流中获取数据来处理呢?答案是显而易见的!在《》一文中,我们在讲编辑日志追踪同步时,也讲到了如下两个连续的处理流程: 4、从编辑日志editLog中获取编辑日志输入流集合streams,获取的输入流为最新事务ID加1之后的数据 5、调用文件系统镜像FSImage实例image的loadEdits()原创 2016-04-12 15:44:14 · 5138 阅读 · 0 评论 -
HDFS源码分析之编辑日志编辑相关双缓冲区EditsDoubleBuffer
DataOutputBuffer是为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。原创 2016-04-12 17:25:47 · 1245 阅读 · 0 评论 -
HDFS源码分析数据块复制之PendingReplicationBlocks
PendingReplicationBlocks实现了所有正在复制的数据块的记账工作。它实现以下三个主要功能: 1、记录此时正在复制的块; 2、一种对复制请求进行跟踪的粗粒度计时器; 3、一个定期识别未执行复制请求的线程。原创 2016-04-13 11:20:13 · 2011 阅读 · 0 评论 -
HDFS源码分析数据块之CorruptReplicasMap
CorruptReplicasMap用于存储文件系统中所有损坏数据块的信息。仅当它的所有副本损坏时一个数据块才被认定为损坏。当汇报数据块的副本时,我们隐藏所有损坏副本。一旦一个数据块被发现完好副本达到预期,它将从CorruptReplicasMap中被移除。原创 2016-04-13 13:47:14 · 1142 阅读 · 0 评论 -
HDFS中数据节点数据块存储示例
HDFS中数据节点数据块存储示例原创 2016-04-13 17:17:06 · 4377 阅读 · 1 评论 -
Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
一、综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode、DataNode、DFSClient等众多角色的分工与合作。 首先上一段代码,客户端是如何写文件的:Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path file原创 2016-12-19 16:12:57 · 5339 阅读 · 2 评论