hdfs源码分析第一弹】的更多相关文章

1. hdfs定义 HDFS is the primary distributed storage used by Hadoop applications. A HDFS cluster primarily consists of a NameNode that manages the file system metadata and DataNodes that store the actual data. 2. hdfs架构 3. hdfs实例 作为文件系统,文件的读写才是核心: /** *…
以写文件为例,串联整个流程的源码: FSDataOutputStream out = fs.create(outFile); 1. DistributedFileSystem 继承并实现了FileSystem,该对象是终端用户和hadoop分布式文件系统交互的接口. 原文说明: /**************************************************************** * Implementation of the abstract FileSystem…
DataBlockScanner是运行在数据节点DataNode上的一个后台线程.它为所有的块池管理块扫描.针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独的线程中,为该块池扫描.校验数据块.当一个BPOfferService服务变成活跃或死亡状态,该类中的blockPoolScannerMap将会更新. 我们先看下DataBlockScanner的成员变量,如下: // 所属数据节点DataNode实例 private final DataNode …
UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块.它是UnderReplicatedBlocks的内部类,有三个成员变量,如下: // 当前迭代级别 private int level; // 标志位:是否为特定复制优先级的迭代器 private boolean isIteratorForLevel = false; // 数据块Block迭代器Iterator列表,存储各级别数据块迭代器 private final List<I…
在<HDFS源码分析之EditLogTailer>一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的实现,及其线程完成编辑日志跟踪所依赖的最重要的方法,执行日志追踪的doTailEdits()方法.在该方法的处理流程中,首先需要从编辑日志editLog中获取编辑日志输入流集合streams,获取的输入流为最新事务ID加1之后的数据.那么这个编辑日志输入流集合streams是如何获取的呢?本文我们将进行详细研…
在<HDFS源码分析心跳汇报之数据结构初始化>一文中,我们了解到HDFS心跳相关的BlockPoolManager.BPOfferService.BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的.那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程运行流程. 首先,我们先看下 那么,BPServiceActor线程是通过什么样的流程来实现心跳的呢?我…
在<HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程>一文中,我们详细了解了数据节点DataNode周期性发送心跳给名字节点NameNode的BPServiceActor工作线程,了解了它实现心跳的大体流程: 1.与NameNode握手: 1.1.第一阶段:获取命名空间信息并验证.设置: 1.2.第二阶段:DataNode注册: 2.周期性调用sendHeartBeat()方法发送心跳信息,并处理来自心跳响应中的命令: 3.调用reportReceivedDeletedB…
在<HDFS源码分析心跳汇报之整体结构>一文中,我们详细了解了HDFS中关于心跳的整体结构,知道了BlockPoolManager.BPOfferService和BPServiceActor三者之间的关系.那么,HDFS心跳相关的这些数据结构,都是如何被初始化的呢?本文,我们就开始研究HDFS心跳汇报之数据结构初始化. 首先,在DataNode节点启动时所必须执行的startDataNode()方法中,有如下代码: // DataNode启动时执行的startDataNode()方法 // 构…
在<HDFS源码分析之DataXceiverServer>一文中,我们了解到在DataNode中,有一个后台工作的线程DataXceiverServer.它被用于接收来自客户端或其他数据节点的数据读写请求,为每个数据读写请求创建一个单独的线程去处理.而处理每次读写请求时所创建的线程,就是本文要讲的DataXceiver.本文,我们来看下DataXceiver的具体实现,着重讲解下它得到数据读写请求后的整体处理流程. 首先,我们先看下DataXceiver的成员变量,具体如下: // 封装了So…
http://blog.csdn.net/lipeng_bigdata/article/details/51160359 UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据结构.在HDFS的高性能.高容错性体系中,总有一些原因促使HDFS系统内进行块复制工作,比如基于高性能的负载均衡.基于容错性的数据块副本数恢复等.普遍的,任何工作都会有一个优先级的问题,特别是这里的数据块复制,不可能简单的按照先入先出或者其他简单策略,比方说,基于容错性的数据块副本数恢复,特别是数据…