- 浏览: 220359 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (114)
- hbase (3)
- akka (7)
- hdfs (6)
- mapreduce (1)
- hive (0)
- zookeeper (8)
- storm (0)
- geese (0)
- leaf (0)
- stormbase (0)
- scala (2)
- oozie (11)
- zeromq (1)
- netty (3)
- mongodb (0)
- sqoop (2)
- flume (3)
- mahout (1)
- redis (0)
- lucene (1)
- solr (1)
- ganglia (3)
- 分布式理论 (2)
- hadoop (42)
- others (14)
- mq (1)
- clojure (3)
- flume ng (1)
- linux (1)
- esper (0)
最新评论
-
javalogo:
[b][i][u]引用[list]
[*][*][flash= ...
什么是Flume -
leibnitz:
what are they meanings
Hadoop Ganglia Metric Item -
di1984HIT:
没用过啊。
akka 介绍-Actor 基础 -
di1984HIT:
写的不错。
Hadoop管理-集群维护 -
developerinit:
很好,基本上介绍了
什么是Flume
http://www.cnblogs.com/wangyonghui/archive/2011/09/07/2169565.html 写道
接着讲另外几个数据结构。
1.CorruptReplicationMap
成员变量:Map<Block, Collection<DatanodeDescriptor>> corruptReplicasMap用来记录datanode上出错的block,getNodes方法返回一个block在哪些datanode上的副本是corrupt的。在FSNamesystem中使用corruptReplicas保存这个map结构。
坏掉的block将放入recentInvalidateSets(Map<String, Collection<Block>>)中,Client或者datanode 通过reportBadBlocks报告出错的block,namenode调用FSNamesystem的markBlockAsCorrupt方法处理。
2.recentInvalidateSets
成员变量:Map<String, Collection<Block>> recentInvalidateSets
保存了每个Datanode上无效但还存在的block(StorageID-> ArrayList<Block>)
replthread后台任务线程中的computeInvalidateWork方法(实际方法是invalidateWorkForOneNode)取出map里第一个datanode节点上所有无效的block,然后将这个block列表设置到invalidateSet集合中,namenode收到心跳信息会依据自己保存的invalidateSet集合来生成一个invalidate blocks的命令返回给datanode,让datanode来处理这些无效的block。
3.UnderReplicatedBlocks
主要的成员是一个优先队列,List<TreeSet<Block>> priorityQueues,保存副本数没有达到期望值的block。根据当前副本数低于期望值的程度决定优先级,差的越远,优先级越大(0~2,0最大)。每个优先级别对应一个TreeSet,getPriority获得优先级后决定放入哪个treeset中。
在FSNamesystem中使用neededReplications保存低于规定副本数的block信息。
涉及neededReplications的一些操作:
当datanode注册到namenode时需要校验这个datanode是否处于正准备退役阶段,是则需要检测该datanode节点上的所有block的复制数是否已经达到复制因子,如果没有则需要加入到neededReplications中 ;
当DecommissionManager的监控线程dnthread执行检测时,如果发现某个退役节点处于正准备退役阶段,则对该退役节点的所有块执行检测,查看是否达到复制因子,如果没有达到则将该block加入到neededReplications中;
当lease被删除时,需要检测和这个租约关联的文件的block数是否和期望值一致,如果小于期望值则将这个块加入到neededReplications中;
当离开安全模式时需要校验block的副本情况,如果没达到副本因子数则加入到neededReplications中;
processPendingReplications方法将pendingReplicationMonitor中监控到的超时的副本拷贝请求重新放入neededReplications中去。
4.PendingReplicationBlocks
主要的成员是Map<Block, PendingBlockInfo> pendingReplications用来保存正在复制的数据块的相关信息。该类中还有一个timerThread,检测副本是否超时的线程;副本拷贝超时(5min)未成功的block 放入到ArrayList<Block> timedOutItems中。
超时的block在FSNamesystem的processPendingReplications方法中又将 timedOutItems 清空, 添加到neededReplications中。
5.excessReplicateMap
Map<String, Collection<Block>> excessReplicateMap
保存Datanode上有效但需要删除的数据块(StorageID -> TreeSet<Block>)比如一个Datanode故障恢复后,上面的数据块在系统中副本数太多,需要删除一些数据块。
6. LeaseManager
hdfs支持write-once-read-many,也就是说不支持并行写,那么对读写的互斥同步就是靠Lease实现的。Lease说白了就是一个有时间约束的锁。客户端写文件时需要先申请一个Lease,对应到namenode中的LeaseManager,客户端的client name就作为一个lease的holder,即租约持有者。LeaseManager维护了文件的path与lease的对应关系,还有clientname->lease的对应关系。LeaseManager中有两个时间限制:softLimit and hardLimit。
软限制就是写文件时规定的租约超时时间,硬限制则是考虑到文件close时未来得及释放lease的情况强制回收租约。
LeaseManager中还有一个Monitor线程来检测Lease是否超过hardLimit。而软租约的超时检测则在DFSClient的LeaseChecker中进行。
当客户端(DFSClient)create一个文件的时候,会通过RPC 调用 namenode 的createFile方法来创建文件。进而又调用FSNameSystem的startFile方法,又调用 LeaseManager 的addLease方法为新创建的文件添加一个lease。如果lease已存在,则更新该lease的lastUpdate (最近更新时间)值,并将该文件的path对应该lease上。之后DFSClient 将该文件的path 添加 LeaseChecker中。文件创建成功后,守护线程LeaseChecker会每隔一定时间间隔renew该DFSClient所拥有的lease。
另外还有一个数据结构:datanodemap,它保存了StorageID -> DatanodeDescriptor的映射,用于保证DataNode使用的Storage的一致性。
至此,namenode上的关键数据结构已经基本上讲完了。
接下来就是namenode上的一些监控线程。
1. HeartbeatMonitor thread
datanode周期性通过RPC调用sendHeartbeat向namenode汇报自身的状态,心跳监控线程对dn和nn之间的心跳进行周期性检测,每隔时间heartbeatRecheckInterval 就执行操作heartbeatCheck()。
heartbeatCheck找到heartbeats中的dead nodes,然后从heartbeats 、clusterMap 、blocksmap这些结构中移除这些dead nodes的信息。
1.CorruptReplicationMap
成员变量:Map<Block, Collection<DatanodeDescriptor>> corruptReplicasMap用来记录datanode上出错的block,getNodes方法返回一个block在哪些datanode上的副本是corrupt的。在FSNamesystem中使用corruptReplicas保存这个map结构。
坏掉的block将放入recentInvalidateSets(Map<String, Collection<Block>>)中,Client或者datanode 通过reportBadBlocks报告出错的block,namenode调用FSNamesystem的markBlockAsCorrupt方法处理。
2.recentInvalidateSets
成员变量:Map<String, Collection<Block>> recentInvalidateSets
保存了每个Datanode上无效但还存在的block(StorageID-> ArrayList<Block>)
replthread后台任务线程中的computeInvalidateWork方法(实际方法是invalidateWorkForOneNode)取出map里第一个datanode节点上所有无效的block,然后将这个block列表设置到invalidateSet集合中,namenode收到心跳信息会依据自己保存的invalidateSet集合来生成一个invalidate blocks的命令返回给datanode,让datanode来处理这些无效的block。
3.UnderReplicatedBlocks
主要的成员是一个优先队列,List<TreeSet<Block>> priorityQueues,保存副本数没有达到期望值的block。根据当前副本数低于期望值的程度决定优先级,差的越远,优先级越大(0~2,0最大)。每个优先级别对应一个TreeSet,getPriority获得优先级后决定放入哪个treeset中。
在FSNamesystem中使用neededReplications保存低于规定副本数的block信息。
涉及neededReplications的一些操作:
当datanode注册到namenode时需要校验这个datanode是否处于正准备退役阶段,是则需要检测该datanode节点上的所有block的复制数是否已经达到复制因子,如果没有则需要加入到neededReplications中 ;
当DecommissionManager的监控线程dnthread执行检测时,如果发现某个退役节点处于正准备退役阶段,则对该退役节点的所有块执行检测,查看是否达到复制因子,如果没有达到则将该block加入到neededReplications中;
当lease被删除时,需要检测和这个租约关联的文件的block数是否和期望值一致,如果小于期望值则将这个块加入到neededReplications中;
当离开安全模式时需要校验block的副本情况,如果没达到副本因子数则加入到neededReplications中;
processPendingReplications方法将pendingReplicationMonitor中监控到的超时的副本拷贝请求重新放入neededReplications中去。
4.PendingReplicationBlocks
主要的成员是Map<Block, PendingBlockInfo> pendingReplications用来保存正在复制的数据块的相关信息。该类中还有一个timerThread,检测副本是否超时的线程;副本拷贝超时(5min)未成功的block 放入到ArrayList<Block> timedOutItems中。
超时的block在FSNamesystem的processPendingReplications方法中又将 timedOutItems 清空, 添加到neededReplications中。
5.excessReplicateMap
Map<String, Collection<Block>> excessReplicateMap
保存Datanode上有效但需要删除的数据块(StorageID -> TreeSet<Block>)比如一个Datanode故障恢复后,上面的数据块在系统中副本数太多,需要删除一些数据块。
6. LeaseManager
hdfs支持write-once-read-many,也就是说不支持并行写,那么对读写的互斥同步就是靠Lease实现的。Lease说白了就是一个有时间约束的锁。客户端写文件时需要先申请一个Lease,对应到namenode中的LeaseManager,客户端的client name就作为一个lease的holder,即租约持有者。LeaseManager维护了文件的path与lease的对应关系,还有clientname->lease的对应关系。LeaseManager中有两个时间限制:softLimit and hardLimit。
软限制就是写文件时规定的租约超时时间,硬限制则是考虑到文件close时未来得及释放lease的情况强制回收租约。
LeaseManager中还有一个Monitor线程来检测Lease是否超过hardLimit。而软租约的超时检测则在DFSClient的LeaseChecker中进行。
当客户端(DFSClient)create一个文件的时候,会通过RPC 调用 namenode 的createFile方法来创建文件。进而又调用FSNameSystem的startFile方法,又调用 LeaseManager 的addLease方法为新创建的文件添加一个lease。如果lease已存在,则更新该lease的lastUpdate (最近更新时间)值,并将该文件的path对应该lease上。之后DFSClient 将该文件的path 添加 LeaseChecker中。文件创建成功后,守护线程LeaseChecker会每隔一定时间间隔renew该DFSClient所拥有的lease。
另外还有一个数据结构:datanodemap,它保存了StorageID -> DatanodeDescriptor的映射,用于保证DataNode使用的Storage的一致性。
至此,namenode上的关键数据结构已经基本上讲完了。
接下来就是namenode上的一些监控线程。
1. HeartbeatMonitor thread
datanode周期性通过RPC调用sendHeartbeat向namenode汇报自身的状态,心跳监控线程对dn和nn之间的心跳进行周期性检测,每隔时间heartbeatRecheckInterval 就执行操作heartbeatCheck()。
heartbeatCheck找到heartbeats中的dead nodes,然后从heartbeats 、clusterMap 、blocksmap这些结构中移除这些dead nodes的信息。
发表评论
-
Hadoop TestDFSIO
2013-04-21 21:02 2442@VM [bigdata@bigdata hadoo ... -
Hadoop NNBENCH
2013-04-21 20:46 1637@VM [bigdata@bigdata hadoop]$ ... -
Hadoop 安装手册
2013-04-08 15:47 1205Hadoop 安装手册 软件准备 ... -
What do real life hadoop workloads look like
2012-09-10 15:52 849http://www.cloudera.com/blog/20 ... -
CDH4 HA 切换时间
2012-09-05 15:15 4395blocksize:35M filesize 96M zk-s ... -
CDH4 HA 切换
2012-09-05 10:51 1413HA 切换问题 切换时间太长。。。 copy 0 ... ... -
Hadoop CDh4 Standby HA 启动过程
2012-08-02 11:40 2872根据日志: StandBy NN启动过程 1.获得Active ... -
CDH4 HA test
2012-08-01 14:55 2661场景: NN HA 设置成功,HA切换客户端出现异 ... -
Hadoop TextOutput
2012-07-29 21:08 914TextOutputFormat 分隔符参数: mapredu ... -
Hadoop SteamXMLRecordReader
2012-07-28 23:59 713StreamXmlRecordReader 设置属性 str ... -
Hadoop NLineInputFormat
2012-07-28 23:52 1662NLineInputFormat 重写了splits 设置 ... -
KeyValueTextInputFormat
2012-07-28 23:40 961key/value 分割符 mapreduce.input. ... -
Hadoop 控制split尺寸
2012-07-28 23:08 1348三个参数决定Map的Split尺寸 1.mapred.min ... -
Setting up Disks for Hadoop
2012-07-22 12:13 885Setting up Disks for Hadoop He ... -
Upgrade hadoop need think about it
2012-07-21 17:17 890Compatibility When movin ... -
Hadoop 0.23 config differ from 0.20.205
2012-07-21 17:14 936http://hadoop.apache.org/common ... -
Hadoop hdfs block 状态
2012-07-15 13:37 7361.In Service -
Hadoop 配置不当引起集群不稳
2012-07-05 15:35 1032配置不当内容 资源配置不当:内存、文件句柄数量、磁盘空间 ... -
Hadoop管理-集群维护
2012-07-03 15:27 50161.检查HDFS状态 fsck命令 1)f ... -
Hadoop Ganglia Metric Item
2012-06-27 11:13 2033dfs.FSDirectory.files_delete ...
相关推荐
1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 HDFS客户端写流程...
在深入分析Hadoop HDFS的源代码之前,我们先对Hadoop HDFS的基本架构和功能进行概述。HDFS,即Hadoop分布式文件系统,是一个高度容错性的系统,旨在存储和处理大规模数据。HDFS的核心组件包括NameNode和DataNode。 ...
《深入剖析Hadoop HDFS源码》 在大数据处理领域,Hadoop作为开源框架的代表,因其高效、可扩展和容错性强等特点,备受开发者喜爱。尤其对于HDFS(Hadoop Distributed File System),它是Hadoop的核心组件,负责...
### Hadoop源码阅读总结:IPC/RPC 通信机制详解 #### 一、概述 Hadoop作为分布式计算框架,其内部各个组件之间的通信主要通过RPC(Remote Procedure Call)实现。本文将详细介绍Hadoop中RPC机制的工作原理,特别是...
第1章 HDFS HA及解决方案 1.1 HDFS系统架构 1.2 HA定义 1.3 HDFS HA原因分析及应对措施 1.3.1 可靠性 1.3.2 可维护性 1.4 现有HDFS HA解决方案 1.4.1 Hadoop的元数据备份方案 1.4.2 Hadoop的SecondaryNameNode方案 ...
- **HDFS组成部分**:HDFS由NameNode、DataNode和Client组成,分别负责元数据管理、数据块存储以及客户端请求处理。 #### 五、深入分析MapReduce - **MapReduce章节**:MapReduce部分共14章,这部分将详细介绍...
#### 一、Hadoop HDFS概述 Hadoop是一种分布式计算框架,主要用于处理大规模数据集。它由多个组件组成,其中最核心的是Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS是一个高度可扩展的文件系统,用于...
【HDFS(Hadoop Distributed File System)概述】 HDFS,全称为Hadoop分布式文件系统,是Apache Hadoop项目的核心组件之一。它是一个高度容错性的分布式文件系统,设计用于跨大量廉价硬件节点运行,旨在处理和存储...
3. **HDFS源码解析** - **NameNode**:管理文件系统的元数据,包括文件、块和目录的映射关系。理解NameNode的工作流程,包括启动、元数据操作、故障恢复等,对于掌握HDFS至关重要。 - **DataNode**:存储数据块,...
Hadoop由Apache基金会开发,其核心包括两个主要部分:Hadoop Distributed File System (HDFS)和MapReduce。HDFS为大规模数据提供了可靠的分布式存储,而MapReduce则负责大规模数据的并行处理。 2. **HDFS详解** -...
HDFS由NameNode和DataNode组成,NameNode负责元数据管理,DataNode则存储实际数据。源码中,`hdfs-client`提供了客户端接口,`hdfs-server`包含了服务器端的相关实现。 6. YARN详解: YARN将资源管理和应用程序...
6. **HDFS源码分析**:研究HDFS如何实现高效的数据存储和访问机制,这对于理解大数据处理中的数据管理至关重要。 7. **Google ProtoBuf源代码分析**:了解Google的ProtoBuf是如何实现高效的序列化和反序列化,有助于...
028 HDFS 文件系统架构概述 029 HDFS架构之NameNode和DataNode 030 HDFS 架构讲解总结 031 回顾NameNode和DataNode 032 HDFS架构之Client和SNN功能 033 HDFS Shell 命令命令讲解和演示 034 讲解HDFS 文件读写流程 ...
├─1.HDFS │ ├─视频-零基础学习Hadoop3.0-HDFS从入门到源码 │ │ │ 00--课程内容大纲和学习目标.mp4 ...│ │ │ 16--Hadoop概述--集群搭建--namenode format操作及注意事项.mp4 │ │ ├─
Hadoop是Apache基金会开源的一个分布式计算框架,它主要由HDFS(Hadoop Distributed File System)和MapReduce两部分组成。HDFS提供了高容错、高吞吐量的数据存储,而MapReduce则负责大规模数据集的并行计算。Hadoop...
6. **Hadoop源码分析**:通过阅读Hadoop源码,可以深入了解其内部机制,例如NameNode如何管理文件系统元数据、DataNode如何进行数据块的读写、MapReduce的作业调度算法等。这对于优化Hadoop集群性能、开发自定义插件...
1. **HDFS**:学习HDFS的架构,包括NameNode、DataNode和Secondary NameNode的角色,以及它们如何协同工作以确保数据的可靠存储和访问。 2. **MapReduce**:理解Map阶段和Reduce阶段的执行流程,以及如何编写...
2. **HDFS源码分析** - **NameNode**: HDFS的元数据管理节点,负责维护文件系统的命名空间和文件块信息。在源码中,主要关注`org.apache.hadoop.hdfs.server.namenode`包下的类,如`FSDirectory`和`NameNode`。 - ...