`
real_junlin
  • 浏览: 19400 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hadoop namenode

 
阅读更多

namenode是hadoop的核心,他管理文件系统的命名空间,维护文件系统树以及这个树的所有的文件和索引目录。这些信息通过两种形式将文件持久化到本地磁盘:命名空间镜像(fsImage)和编辑日志(edit log).名称节点记录着每个文件的每个块所在的数据节点,但是不永久保存块的位置,这些信息会在系统启动是有数据节点重建推送过来。

主要管理两个东西

 

The NameNode controls twocritical tables:

 *   1)  filename->blocksequence (namespace)

 *   2)  block->machinelist ("inodes")

 

文件名-->数据块

数据块-->DataNode列表

文件名-->数据块保存在磁盘上(持久化);但NameNode上不保存数据块-->DataNode列表,该列表是通过DataNode上报建立起来的。

 

Namenode实现了ClientProtocol 、DatanodeProtocol NamenodeProtocol、可以提供给客户端、datanoe、secondory namenode调用的方法,是通过rpc机制调用的。

 

ClientProtocol提供给客户端,用于访问NameNode。它包含了文件角度上的HDFS功能。和GFS一样,HDFS不提供POSIX形式的接口,而是使用了一个私有接口。一般来说,程序员通过org.apache.hadoop.fs.FileSystem来和HDFS打交道:最常用的分布式文件类是DistributedFileSystem,包含有DFSClient dfs,包含了ClientProtocol rpcNamenode实例,分布式文件实例通过dfs-->rpcNamenode代理类跟Namenode进行间接关联,具体可以参考详细的api

 

DatanodeProtocol:用于DataNodeNameNode通信,包括:

register,用于DataNode注册;

sendHeartbeat/blockReport/blockReceived,用于DataNodeofferService方法中;

errorReportNameNode报告一个错误的Block,用于BlockReceiverDataBlockScanner

nextGenerationStampcommitBlockSynchronization用于lease管理。

 

NamenodeProtocol用于从NameNodeNameNode的通信。主要是secondary NameNode 到NameNode的调用


 

启动:

1初始化ipc server, 主要负责接收并处理来自客户端/datanode的连接(详细情况见hadoop rpc学习

2 Namenode通过FSNamesystem来实现对内部文件的管理:

初始化FSNamesystem, 然后查找StorageDirectory,查找配置文件(dfs.name.edits.dir和 dfs.name.dir)就是正在修改的命名空间文件和命名空间文件,放到List<StorageDirectory> storageDirs 中,循环找出需要进行修复或者回滚的文件内容,进行处理。查找到最新的StorageDirectory,装载image文件(\home\baqun\tmp\dfs\name\current\fsimage其中包括了版本信息、文件个数、最后修改时间、包含的block的信息、权限控制信息、datanode信息、正在创建的文件信息)

(这是一个复杂的过程,把blocks的信息、inode的信息,permission、parent inode然后组装起来 读取datanode\)

然后把edit log也装载进来:读取两个edit文件,一个是之前的edit log,另外一个是正在写的log文件,装载然后merge进内存。

3提供服务

 

其中FSNamesystem的初始化是一个重要的过程:

 

初始化如下:

1初始化FSDirectory

2装载最新的命名空间文件

3机器名、端口号设置

4配置信息初始化(文件副本数、最大/小文件副本数、默认block大小、心跳时间间隔)

5设置safeMode,安全模式:

安全模式是这样一种状态,系统处于这个状态时,不接受任何对名字空间的修改,同时也不会对数据块进行复制或删除数据块。NameNode启动的时候会自动进入安全模式,同时也可以手工进入(不会自动离开)。系统启动以后,DataNode会报告目前它拥有的数据块的信息,当系统接收到的Block信息到达一定门槛,同时每个Block都有dfs.replication.min个副本后,系统等待一段时间后就离开安全模式。这个门槛定义的参数包括:

l          dfs.safemode.threshold.pct:接受到的Block的比例,缺省为95%,就是说,必须DataNode报告的数据块数目占总数的95%,才到达门槛;

l          dfs.replication.min:缺省为1,即每个副本都存在系统中;

l          dfs.replication.min:等待时间,缺省为0,单位秒。

6构造线程:

Daemonhbthread = null;   //HeartbeatMonitor thread

  public Daemonlmthread = null;   // LeaseMonitorthread

  Daemon smmthread = null;  // SafeModeMonitor thread

public Daemonreplthread = null;  // Replicationthread
NameNode上的线程,分别对应DataNode心跳检查,租约检查,安全模式检查和数据块复制。各个线程的工作模式在后边介绍。

7 DNSToSwitchMapping对象实例化:

是HDFS节点之间的网络拓扑的实现


Heartbeat线程(主要有FSNamesystem实现):

HeartbeatMonitor 有一个ArrayList<DatanodeDescriptor>heartbeats,记录的是datanode的注册信息,这个线程定时去轮询所有的心跳连接,检测这个datanode是不是超时(死亡,一个时间段内无连接),如果已经认定死亡,就删除这个节点,紧接着做如下处理:

(1) 更新全部可用空间,全部的容量,剩余容量

(2) heartbeats里删除这个心跳,删除这个node删除的所有block信息,在整个的blockMap里也删除block信息,重置这个节点描述对象的信息(应该是为了gc),

(3) 在NetworkTopology里删除这个节点的信息(在网络结构中删除这个节点,他是一个树状的网络拓扑结构,一个集群是由数据中心组成的,这个数据中心包括rack(机架),机架上有多台机器,在这个结构中,叶子节点代表了datanode,中间节点代表了交换机/路由器,他们负责管理rack/数据中心数据的传输,这个类主要负责计算两个节点之间的关系,是通过一个算法来维护的,方法就是

getDistance(Node node1, Nodenode2)

在dfs的副本文件存储的规则(下图)是HDFS’s placement policy is to putone replica on one node in the local rack, another on a different node in thelocal rack, and the last on a different node in a different rack)那么这个抽象类完美的抽象了网络top结构,是非常精妙的实现方式

 

租约线程:

 

一个租约由一个holder(客户端名),lastUpdate(上次更新时间)和paths(该客户端操作的文件集合)构成。LeaseManagerLease进行管理。租约线程Monitor通过对Lease的最后更新时间来检测Lease是否过期,如果过期,就调用FSNamesysteminternalReleaseLease方法。

 

复制线程replthread:

replthread运行ReplicationMonitor,这个线程会定期调用computeDatanodeWork和processPendingReplications。

computeDatanodeWork会执行computeDatanodeWork或computeInvalidateWork。computeDatanodeWork从neededReplications中扫描,取出需要复制的项,然后:

l           检查文件不存在或者处于构造状态;如果是,从队列中删除复制项,退出对复制项的处理(接着处理下一个);

l           得到当前数据块副本数并选择复制的源DataNode,如果空,退出对复制项的处理;

l           再次检查副本数(很可能有DataNode从故障中恢复),如果发现不需要复制,从队列中删除复制项,退出对复制项的处理;

l           选择复制的目标,如果目标空,退出对复制项的处理;

l           将复制的信息(数据块和目标DataNode)加入到源目标DataNode中;在目标DataNode中记录复制请求;

l           从队列中将复制项移动到pendingReplications。

这个方法执行后,复制项从neededReplications挪到pendingReplications中。DataNode在某次心跳的应答中,可以拿到相应的信息,执行复制操作。

 

 

参考:

 

Hadoop源代码分析

 

 


分享到:
评论

相关推荐

    Hadoop Namenode性能诊断及优化

    ### Hadoop Namenode性能诊断及优化 #### 一、Namenode简介与性能挑战 Hadoop作为大数据处理领域的核心技术之一,其分布式文件系统HDFS(Hadoop Distributed File System)是整个框架的重要组成部分。HDFS主要由两...

    hadoop NameNode 源码解析

    Hadoop NameNode 源码解析 Hadoop 的 NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件之一,负责管理文件系统的 namespace 和数据块的存储位置。在本文中,我们将深入探讨 Hadoop NameNode 的源码,了解其...

    hadoop namenode双机热备

    在IT行业中,高可用性是关键,特别是在大数据处理领域,Hadoop作为分布式计算框架,其NameNode节点的稳定性至关重要。"hadoop namenode双机热备"是为确保Hadoop集群持续运行而采取的一种重要策略,通过双机热备可以...

    Hadoop Namenode恢复

    Hadoop Namenode 恢复 Hadoop Namenode 是 Hadoop 分布式文件系统的核心组件之一,负责管理文件系统的命名空间。然而,在生产环境中,namenode 的崩溃可能会导致整个集群的不可用。因此,namenode 的恢复是非常重要...

    Hadoop NameNode的守护者:集群单点故障的解决之道

    ### Hadoop Hadoop是一个开源框架,由Apache软件基金会开发,用于在普通硬件集群上存储和处理大量数据。它的核心组件包括: 1. **Hadoop Distributed File System (HDFS)** - 一个分布式文件系统,设计用于在多个...

    Hadoop常见异常

    这个错误可能是由于Hadoop无法连接到NameNode导致的。解决办法是,检查Hadoop的配置文件,确保NameNode的设置正确。 Hadoop常见的异常有多种,解决方法也各不相同。但是,通过检查Hadoop的配置文件,释放更多的磁盘...

    hadoop-2.8.4源码

    Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要用于处理和存储海量数据。Hadoop 2.8.4是该框架的一个稳定版本,包含了多个重要的改进和修复,为大数据处理提供了可靠的解决方案。在这个版本中,我们...

    hadoop2.4.1三台机器分布式安装

    weekend01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc) weekend03 192.168.1.203 jdk、hadoop ...

    hadoop安装过程中的问题

    6.hadoop namenode format 7./hadoop/etc/slaves这个文件里必须把所有的slaves的主机名写进去。 8.mast的/etc/hosts slave1的/etc/hosts slave2 的/etc/hosts (localhost: 127.0.0.1可以去掉,只写主机名对应的IP...

    基于zookeeper的hadoop ha集群安装过程

    * 需要确保Hadoop NameNode和DataNode的高可用性,以便于Hadoop HA集群的正常运行。 * 需要配置Hadoop HA集群,以实现高可用性和可扩展性。 基于ZooKeeper的Hadoop HA集群可以提供高可用性和可扩展性,满足企业对大...

    运行成功的hadoop配置文件

    Without "hadoop namenode -format" 目录结构: /data/hadoop 为工作目录,实际为一个链接(link) /data/hadoop-0.19.1 为实际0.19.1的安装目录 /data/hadoop-0.20.1 为实际0.20.1的安装目录 /data/hadoop-0.19.1的...

    hadoop运行wordcount实例

    - 解决方案:当执行 `hadoop namenode -format` 时,确保 DataNode 和 NameNode 的元数据被正确格式化。若之前有残留的临时文件,需要先清除,然后重新执行格式化命令 `hadoop namenode -format`。 #### 三、成功...

    hadoop组件程序包.zip

    5. 初始化HDFS:执行hadoop namenode -format命令,初始化NameNode。 6. 启动Hadoop:依次启动DataNode、NameNode、YARN和MapReduce服务。 7. 测试运行:使用hadoop fs -ls命令检查HDFS是否正常工作,通过运行...

    hadoop配置运行错误

    问题描述:在hadoop系统中,如果我们对namenode进行格式化(使用bin/hadoop namenode -format命令),然后重启集群,可能会出现Incompatible namespaceIDS错误。 解决方法: 1. 删除datanode的数据文件:删除...

    大数据 hadoop-3.1.3 linux 安装包

    完成配置后,初始化HDFS命名空间,格式化NameNode,通过`hadoop namenode -format`命令实现。接着,启动Hadoop的各个服务,包括DataNode、NameNode、ResourceManager、NodeManager等。可以使用`start-dfs.sh`和`...

    win环境 hadoop 3.1.0安装包

    在命令行中执行`hadoop namenode -format`,对HDFS进行初始化。 9. **启动Hadoop**: 运行`start-dfs.cmd`启动HDFS,然后运行`start-yarn.cmd`启动YARN。通过`jps`命令检查Hadoop进程是否正常运行。 10. **测试...

    hadoop2.7.3版本 windows下安装步骤和配置文件(不用cywin)

    5. **格式化NameNode**: 打开命令行,进入Hadoop的bin目录,运行`hadoop namenode -format`命令,初始化NameNode。 6. **启动Hadoop服务**: 先启动DataNode,然后启动NameNode,接着启动YARN和MapReduce的服务。...

    Windows上安装Hadoop

    - 初始化NameNode:`hadoop namenode -format`。 - 启动DataNode:`hadoop datanode`。 - 启动NameNode:`hadoop namenode`。 - 启动ResourceManager:`yarn resourcemanager`。 - 启动NodeManager:`yarn ...

    hadoop集群维护手册.pdf

    2. 在 Hadoop Namenode 的配置文件中添加新节点的主机名。 3. 执行 bin/start-all.sh 命令启动集群。 4. 等待数据平衡完成。 三、数据平衡 数据平衡是 Hadoop 集群维护的重要一步骤。可以使用 start-balancer.sh ...

    hadoop-2.4.1版本大数据

    4. **格式化NameNode**:使用`hadoop namenode -format`命令对NameNode进行格式化。 5. **启动Hadoop**:依次启动DataNode、ResourceManager、NodeManager和NameNode。 6. **测试运行**:通过上传文件到HDFS并执行...

Global site tag (gtag.js) - Google Analytics