04 namenode和datanode

namenode元数据管理

1、什么是元数据?
hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>)

2、元数据由谁负责管理?
namenode

3、namenode把元数据记录在哪里?
namenode的实时的完整的元数据存储在内存中;
namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件;
namenode会把引起元数据变化的客户端操作记录在edits日志文件中;

namenode主要功能模块

1.namespace管理,即fileName与block序列的一个关系映射 2.Block管理,即解决block与dataNode的关系映射问题
3.提供IPC(Inter­Process Communication 跨进程通信)服务,解决nameNode与dataNode之间的数据通信,比如 dataNode的Block Report
fileName与block序列的映射关系是保存在fsimage文件中并写入到本地磁盘进行持久化的,block 与dataNode的映射关系是依靠dataNode通过Block Report主动上报方式来获取的,nameNode大 部分时间都是在被动的接收dataNode/SecondaryNameNode/Client的RPC请求服务。 当editlog达到一定的大小(bytes,由fs.checkpoint.size参数定义)或从上次保存过后一定时间段 过后(sec,由fs.checkpoint.period参数定义),会触发fsimage文件和editlog文件的合并操作,这个操作由secondaryNameNode负责。

Fsimage是一个二进制文件,其大致结构如下图:

1. 首先是一个image head,其中包含:
a) imgVersion(int):当前image的版本信息
b) namespaceID(int):命名空间ID,唯一的
c) numFiles(long):整个文件系统中包含有多少文件和目录
d) genStamp(long):生成该image时的时间戳信息。 

2. 接下来便是对每个文件或目录的源数据信息,如果是目录,则包含以下信息:
a) path(String):该目录的路径,如”/user/build/build­index”
b) replications(short):副本数(目录虽然没有副本,但这里记录的目录副本数也为3)
c) mtime(long):该目录的最后一次修改时间的时间戳信息
d) atime(long):该目录的最后一次访问时间的时间戳信息
e) blocksize(long):目录的blocksize都为0
f) numBlocks(int):实际有多少个block块,目录的该值都为­1,表示该item为目录
g) nsQuota(long):namespace Quota值即namespace的配额,若没加Quota限制则为­1
h) dsQuota(long):disk Quota值即硬盘配额,若没加限制则也为­1
i) username(String):该目录的所属用户名
j) group(String):该目录的所属用户组
k) permission(short):该目录的permission信息即权限信息,如644,755等,有一个short来记录。 

3. 若从fsimage中读到的item是一个文件,则还会额外包含如下信息:
a) blockid(long):属于该文件的block的blockid,
b) numBytes(long):该block的字节大小
c) genStamp(long):该block的时间戳
当该文件对应的numBlocks数不为1,而是大于1时,表示该文件对应有多个block信息,此时紧接在该fsimage之后的就会有多个blockid,numBytes和genStamp信息。根据以上信息我们可以了解到,fsimage里没有持久化保存block与dataNode的映射关系,block与dataNode的映射关系是依赖dataNode主动上报给nameNode的。当dataNode启动时,dataNode会扫描其本地硬盘,将保存在当前dataNode上的block信息通过RPC请求主动上报给nameNode,nameNode收到请求数据后会把block与dataNode的映射关系数据保存在内存中。dataNode向nameNode汇报block信息的过程叫做blockReport。而block与dataNode的映射关系是由nameNode构建的一个blockMap数据结构中,blockMap数据结构如下图:

BlockMap其实就是Block与BlockInfo的一个映射表,key就是block对象,value就是BlockInfo,BlockInfo继承自Block。这里的InodeFile即表示这个block属于哪个文件的,DN1,DN2,DN3即表示这个block在哪几个dataNode上有备份。(DN即dataNode的缩写)。fsimage加载完毕后,BlocksMap中仅缺少每个block对应到其所属的datanodes list的映射关系信息,而这部分信息就是dataNod启动时主动上报给nameNode的,nameNode收到这部分信息后,就完成了对BlockMap的构建。

这里的prev,next表示的是当前这个block在当前nameNode上的前一个blockInfo和后一个blockInfo信息,即采用链表结构来存储一个dataNode的所有block信息的,而不是简单的block[]数组,这样做的主要目的是为了节省内存。而且由于需要查询某个dataNode上有哪些block,这个需求一般不大。
block经常会因为各种原因(磁盘坏掉等)出现读写错误,所以nameNode为维护标记block的状态为Corrupt(即损坏的意思),当dataNode发送心跳包过来的时候,nameCode会返回dataNode一个信号,告诉该dataNode把存在于其dataNode上的损坏的block删除掉。
每个block默认都会有3个副本(即3个备份,分别分部在多个dataNode上),但集群中随时都有可能会有硬盘损坏,datanode下线等问题,这时block的副本数会下降,为了提高block的期望副本数(通常为3),dataNode会对该block进行拷贝,不一定是拷贝到当前dataNode上,也有可能会拷贝到其他dataNode上。

原文地址:https://www.cnblogs.com/zhaochengf/p/12128853.html

时间: 2024-07-31 09:39:52

04 namenode和datanode的相关文章

HDFS体系结构(NameNode、DataNode详解)

hadoop项目地址:http://hadoop.apache.org/ 分布式文件系统概述: 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般. 容错.即使系统中有某些节点脱机,整体

Hadoop介绍-4.Hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker

Hadoop是一个能够对大量数据进行分布式处理的软体框架,实现了Google的MapReduce编程模型和框架,能够把应用程式分割成许多的 小的工作单元,并把这些单元放到任何集群节点上执行.在MapReduce中,一个准备提交执行的应用程式称为「作业(job)」,而从一个作业划分出 得.运行于各个计算节点的工作单元称为「任务(task)」.此外,Hadoop提供的分布式文件系统(HDFS)主要负责各个节点的数据存储,并实现了 高吞吐率的数据读写. 在分布式存储和分布式计算方面,Hadoop都是用

HDFS中的NameNode和DataNode

HDFS集群中以Master-Slave模式运行,主要有两类节点:一个Namenode节点(即master)和多个Datanode节点.Namenode管理文件系统的Namespace.他维护着文件系统树以及文件树中所有的文件和文件夹的元数据. hdfs架构图: Namenode: Namenode管理文件系统的Namespace.它维护着文件系统树以及文件树中所有的文件和文件夹的元数据(Metadata).管理这些信息的文件有两个,分别是Namespace镜像文件(Namespace imag

NameNode和DataNode间的联系

本文内容还是转载自--吴超沉思录里的,还是挺佩服吴超老师的O(∩_∩)O~ 以下介绍NameNode和DataNode所扮演的角色: (1)NameNode NameNode的作用是管理文件目录结构,是管理数据节点的.NameNode维护两套数据:一套是文件目录与数据块之间的关系,另一套是数据块与节点间的关系.前一套是静态的,是存放在磁盘上的,通过fsimage和edits文件来维护:后一套数据是动态的,不持久化到磁盘,每当集群启动的时候,会自动建立这些信息. (2)DataNode DataN

hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍

1)NameNode.DataNode和Client NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间.集群配置信息和存储块的复制等.NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息.每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等. DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNod

什么是NameNode和DataNode?他们是如何协同工作的?

[学习笔记] 什么是NameNode和DataNode?他们是如何协同工作的? 马克-to-win @ 马克java社区:一个HDFS集群包含一个NameNode和若干的DataNode(start-dfs命令就启动了NameNode和DataNode), NameNode是管理者,主要负责管理hdfs文件系统,具体包括namespace命名空间管理(即目录结构)和block管理.DataNode主 要用来存储数据文件,因为文件可能巨大无比(大数据,大于1TB),HDFS将一个文件分割成一个个的

Hadoop中NameNode、DataNode和Client三者之间的通信方式是什么?怎样进行合作?

一直没有重视三者之间的通信问题,在此整理一下提问:datanode之间有没有交互?Hadoop安装时ssh如何配置? 1.背景知识: 在Hadoop系统中,master/slaves/client的对应关系是:master---namenode:slaves---datanode:client---dfsclient:通信方式简单地讲:client和namenode之间是通过rpc通信:datanode和namenode之间是通过rpc通信:client和datanode之间是通过简单的sock

hadoop学习笔记--NameNode和DataNode以及容错处理

概念: HDFS会把一个很大的文件分块(与传统的文件系统类似),存放在不同的DataNode上.不过这个块是个逻辑概念,比较大,默认是64M. Hadoop以"管理者-工作者"模式运行.NameNode就是管理者,它保存了文件系统中所有文件以及目录信息.也记录了每个文件的分块信息.但这些分块具体在哪些机器上存储则由DataNode自己上报. 容错: NameNode的容错: 所有的文件访问都要通过NameNode来进行,所以NameNode至关重要.一旦NameNode发生毁坏,则整个

重新格式化hadoop的namenode导致datanode无法启动的最简单解决办法

一般namenode只格式化一次,重新格式化不仅会导致之前的数据都不可用,而且datanode也会无法启动.在datanode日志中会有类似如下的报错信息: java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-root/dfs/data: namenode clusterID = CID-7f25bc20-e822-4b15-9063-4da48884cb60; datanode clusterID = CID-911d3bd8