随笔分类 -  HDFS

摘要:Mapper是MapReduce编程模型中一个将输入的key/value对映射成一组中间key/value对的组件。Map是将输入记录转换成中间记录的单个任务。被转换的中间记录不需要与输入记录一样的类型。一个给定的输入对可能被映射成0个货多个输出对。Hadoop的MapReduce框架为作业中输入格 阅读全文
posted @ 2016-06-03 15:05 吉日木图 阅读(269) 评论(0) 推荐(0)
摘要:FSImage文件是HDFS中名字节点NameNode上文件/目录元数据在特定某一时刻的持久化存储文件。它的作用不言而喻,在HA出现之前,NameNode因为各种原因宕机后,若要恢复或在其他机器上重启NameNode,重新组织元数据,就需要加载对应的FSImage文件、FSEditLog文件,并在内 阅读全文
posted @ 2016-06-03 14:55 吉日木图 阅读(830) 评论(0) 推荐(0)
摘要:DataBlockScanner是运行在数据节点DataNode上的一个后台线程。它为所有的块池管理块扫描。针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独的线程中,为该块池扫描、校验数据块。当一个BPOfferService服务变成活跃或死亡状态,该类中 阅读全文
posted @ 2016-06-03 14:54 吉日木图 阅读(478) 评论(0) 推荐(0)
摘要:HDFS源码分析数据块复制监控线程ReplicationMonitor(二) 阅读全文
posted @ 2016-06-03 14:53 吉日木图 阅读(155) 评论(0) 推荐(0)
摘要:数据块的复制当然需要一个源数据节点,从其上拷贝数据块至目标数据节点。那么数据块复制是如何选取复制源节点的呢?本文我们将针对这一问题进行研究。 在BlockManager中,chooseSourceDatanode()方法就是用来选取数据块复制时的源节点的,它负责解析数据块所属数据节点列表,并选择一个 阅读全文
posted @ 2016-06-03 14:53 吉日木图 阅读(612) 评论(0) 推荐(0)
摘要:ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列。其定义及作为线程核心的run()方法如下: [java] view plain copy /** * Periodically calls c 阅读全文
posted @ 2016-06-03 14:52 吉日木图 阅读(416) 评论(0) 推荐(0)
摘要:UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块。它是UnderReplicatedBlocks的内部类,有三个成员变量,如下: [java] view plain copy // 当前迭代级别 private int level; 阅读全文
posted @ 2016-06-03 14:51 吉日木图 阅读(279) 评论(0) 推荐(0)
摘要:UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据结构。在HDFS的高性能、高容错性体系中,总有一些原因促使HDFS系统内进行块复制工作,比如基于高性能的负载均衡、基于容错性的数据块副本数恢复等。普遍的,任何工作都会有一个优先级的问题,特别是这里的数据块复制,不可能简单的 阅读全文
posted @ 2016-06-03 14:50 吉日木图 阅读(460) 评论(0) 推荐(0)
摘要:LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组array存储元素,使用linked lists来解决冲突。它没有实现重新哈希分区,所以,内部的array不会改变大小。这个 阅读全文
posted @ 2016-06-03 14:49 吉日木图 阅读(391) 评论(0) 推荐(0)
摘要:无论是第一次,还是之后的每次数据块汇报,名字名字节点都会对汇报上来的数据块进行检测,看看其是否为损坏的数据块。那么,损坏数据块是如何被检测的呢?本文,我们将研究下损坏数据块检测的checkReplicaCorrupt()方法。 关于数据块及其副本的状态,请阅读《HDFS源码分析之数据块及副本状态Bl 阅读全文
posted @ 2016-06-03 14:48 吉日木图 阅读(810) 评论(0) 推荐(0)
摘要:关于数据块、副本的介绍,请参考文章《HDFS源码分析之数据块Block、副本Replica》。 一、数据块状态BlockUCState 数据块状态用枚举类BlockUCState来表示,代码如下: [java] view plain copy /** * States, which a block  阅读全文
posted @ 2016-06-03 14:47 吉日木图 阅读(388) 评论(0) 推荐(0)
摘要:数据块在数据节点上是按照如下方式存储的。 首先是一个存储的根目录/Hadoop/data/dfs/dn,如下图所示: 接着进入current目录,如下图所示: 再进入后续的BP-433072574-192.168.1.224-1440568979639下current目录,如下图所示: 在它下面,有 阅读全文
posted @ 2016-06-03 14:46 吉日木图 阅读(741) 评论(0) 推荐(0)
摘要:CorruptReplicasMap用于存储文件系统中所有损坏数据块的信息。仅当它的所有副本损坏时一个数据块才被认定为损坏。当汇报数据块的副本时,我们隐藏所有损坏副本。一旦一个数据块被发现完好副本达到预期,它将从CorruptReplicasMap中被移除。 我们先看下CorruptReplicas 阅读全文
posted @ 2016-06-03 14:45 吉日木图 阅读(357) 评论(0) 推荐(0)
摘要:我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica。那么,什么是Block?什么又是Replica? 首先,我们看下Block的定义,如下: [java] view plain copy /*** 阅读全文
posted @ 2016-06-03 14:45 吉日木图 阅读(343) 评论(0) 推荐(0)
摘要:PendingReplicationBlocks实现了所有正在复制的数据块的记账工作。它实现以下三个主要功能: 1、记录此时正在复制的块; 2、一种对复制请求进行跟踪的粗粒度计时器; 3、一个定期识别未执行复制请求的线程。 我们先看下它内部有哪些成员变量,如下: [java] view plain  阅读全文
posted @ 2016-06-03 14:44 吉日木图 阅读(521) 评论(0) 推荐(0)
摘要:EditsDoubleBuffer是为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。在其内部,有两个重要的缓冲区成员变量,如下: [java] view plain c 阅读全文
posted @ 2016-06-03 14:43 吉日木图 阅读(362) 评论(0) 推荐(0)
摘要:在《HDFS源码分析之EditLogTailer》一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的实现,及其线程完成编辑日志跟踪所依赖的最重要的方法,执行日志追踪的doTailEdits()方法。在该方法的处理 阅读全文
posted @ 2016-06-03 14:41 吉日木图 阅读(523) 评论(0) 推荐(0)
摘要:在《HDFS源码分析EditLog之获取编辑日志输入流》一文中,我们详细了解了如何获取编辑日志输入流EditLogInputStream。在我们得到编辑日志输入流后,是不是就该从输入流中获取数据来处理呢?答案是显而易见的!在《HDFS源码分析之EditLogTailer》一文中,我们在讲编辑日志追踪 阅读全文
posted @ 2016-06-03 14:41 吉日木图 阅读(670) 评论(0) 推荐(0)
摘要:在FSNamesystem中,有这么一个成员变量,定义如下: [java] view plain copy /** * Used when this NN is in standby state to read from the shared edit log. * 当NameNode处于stand 阅读全文
posted @ 2016-06-03 14:40 吉日木图 阅读(795) 评论(0) 推荐(0)
摘要:HDFS源码分析心跳汇报之周期性心跳,近期推出! 阅读全文
posted @ 2016-06-03 14:39 吉日木图 阅读(198) 评论(0) 推荐(0)