HDFS 体系结构详解

Hdfs体系结构:三个进程(namenode,datanode, secondary namenode)

Hdfs(hadoopdistributed filesystem)是hadoop的核心子项目,是分布式存储,它是基于流数据模式的访问和处理超大文件。(分布式最大的好处就是其通透性,虽然分布存在不同的datanode上面,但是感觉在一台电脑的本地进行操作)。

Tips:

Hdfs的高可用性主要取决于namenode,间接取决于元数据的可靠性和namenode的服务回复时间。

磁盘元数据文件,所有的元数据文件是将存放在内存之中的,一旦断电,内存中的数据将会全部消失,所以需要将数据存放在磁盘上面 永久保存。

磁盘员数据文件包含:

fsimage 元数据镜像文件,存储的是某一时刻的namenode内存元数据信息。

edits:日志文件 包含了该时刻以后的元数据操作记录。

fstime:保存了最近的checkpoint的时间

VERSION:标志性文件,代表前面三个文件成功创建。

Namenode(进程):元数据节点,用来管理文件系统的命名空间,维护目录树,接管用户的请求。

(1)    将文件的元数据保存在一个文件目录树中

(2)    在磁盘上保存为:fsimage 和 edits

(3)    保存datanode的数据信息的文件,在系统启动的时候读入内存。

下面看下hdfs配置文件源码分析,里面的内容立即显现:

hdfs-default.xml:

首先这个文件不可以修改的,若是想修改某些属性,拷贝实体到hdfs-site.xml文件中进行配置,这也是开始安装hadoop的配置文件中的一些<configuration>

下面namenode存储的元数据信息的配置:

这个property中包含一个:

${hadoop.tmp.dir}是基于core-default.xml文件配置的:

${user.name}安装hadoop的用户名字。

基于在本地文件系统之上的分布式文件系统的name node 是存储 名字表的,保存为fsimage文件,为了冗余(备份,安全性)可以用逗号(,)分隔目录列表。

例如:

逗号之间什么都不允许添加,否则将会不识别。

当 cd ${hadoop.tmp.dir}(自己定义的目录)/dfs/name

ls 出现

其中有个in_use.lock 文件,表明已有进程执行(lock住了,即namenode进程)。

cd current/

ls 出现:

正好满足 fsimage(镜像文件namenode的核心数据文件),edits文件的存在。

如果namenode 失效 将无法恢复 datanode。

Edits

edits:transaction file (事物文件),为了保存数据的一致性,写入数据的过程需要先写入edits中,edits保存操作的过程,当过程结束时,edits是知道的,但fsimage不清楚,只有操作成功了,才会通知fsimage。此时,要将edits数据操作成功的报告告诉给fsimage,需要通过的进程就是 secondarynamenode,所以secondarynamenode的主要作用就是合并fsiamge和edits的,形成新的fsimage,在本地保存,在发送给namenode,同时重置namenode的edits。Namenode之所以不进行合并,而应用secondarynamenode来操作,主要就是namenode需要快速接管用户的请求,需要快速响应。所以fsimage文件保存了一份在secondarynamenode中,所以当namenode的数据丢失的情况,可以进行secondarynamenode恢复,但是可能会丢失一部分数据,就是没有来得及合并的fsimage和edits,即备份数据不是实时的,是冷备份。

Tips:

fsimage:是内存的元数据在硬盘上的checkpoint,更新fsimage文件需要有个checkpoin过程:

  • 从元数据节点通知元数据节点生成新的日志文件,以后的日志都写到新的日志文件中。
  • 从元数据节点用http get从元数据节点获得fsimage文件及旧的日志文件。
  • 从元数据节点将fsimage文件加载到内存中,并执行日志文件中的操作,然后生成新的fsimage文件。
  • 从元数据节点奖新的fsimage文件用http post传回元数据节点
  • 元数据节点可以将旧的fsimage文件及旧的日志文件,换为新的fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,写入此次checkpoint的时间。
  • 这样元数据节点中的fsimage文件保存了最新的checkpoint的元数据信息,日志文件也重新开始,不会变的很大了。

此外:

这个作用和上面的一致,多备份几个文件,需要用逗号分隔(,)。

DataNode的进程:主要就是存储真实数据。

需要存储(上传)数据时,需要先报告给namenode,namenode找到空闲的datanode,才可以进行操作。

Datanode存储数据的时候,是以block为单位进行,默认大小64MB.

在hdfs-default.xml文件中,如果用户根据自己的实际情况,需要修改默认的block的大小,如果修改为128MB,256MB的时候,需要注意的是(修改将在hdfs-site.xml文件中进行),同上。

流式数据,将待存储的数据划分为多个block,namenode将block放到不同的datanode中,但是不同于操作系统的切分单位(簇),若是文件大小小于默认大小,并不会按照默认大小来存储,而是按照实际的大小来存储,此外需要注意

若是上亿(虚拟量)的数量是小文件来存储,此时可以进行,但是效率不高,造成namenode的压力过大,解决:可以将小文件合并处理,将会很有效果,所以也印证了hdfs对于海量小文件的存储,效果并不是很好。

 

源码中datanode的配置:

由名字可见,datanode进程是:dfs.data.dir 而namenode进程是:dfs.name.dir

解释是:datanode存储block的地方。

当 cd${hadoop.tmp.dir}(自己定义的目录)/dfs/data

ls 出现

在进入 cd current | ls 出现:

由图可知:block是成对出现的

由于上传数据的时候,会被分块,破坏,此时.meta文件主要类似是校验数据的作用,类似于(MD5)。

当上传文件的时候,在datanode的路径中去查看切分好的数据block。

例如:hadoop fs –put /

查询blocks:cd ${hadoop.data.dir}(自己定义)/dfs/data/current

ll:

但是发现,上传之后是在linux文件系统上面,是否可以通过手动拷贝传递?No,手动上传hdfs是不承认的(通过
hadoopfs –ls 是查看不到的),原因是namenode并不清楚是否上传。

时间: 2024-10-04 01:06:29

HDFS 体系结构详解的相关文章

HDFS体系结构详解

HDFS的体系框架是Master/Slave结构,一个典型的HDFS通常由单个NameNode和多个DataNode组成.NameNode是一个中心服务器,负责文件系统的名字空间的操作,比如打开.关闭.重命名文件或目录,它负责维护文件路径到数据块的映射,数据块到DataNode的映射,以及监控DataNode的心跳和维护数据块副本的个数.集群中的DataNode一般是一个节点一个,负责管理它所在节点上的存储.HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据.从内部看,一个文件

oracle体系结构详解

Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白. 如图: 一.基本组成: Oracle server: 一般情况下是一个instance和一个database组成 1个instance只能对应一个数据库.    特殊:1个数据库可以有多个instance(rac) 一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID . 利用DBCA建出的每个库都是相对独立

oracle 体系结构详解

Oracle体系结构就是围绕这张图展开的,要想深入了解oracle,就必须把这张图搞明白. 如图: 一.基本组成: Oracle server: 一般情况下是一个instance和一个database组成 1个instance只能对应一个数据库.    特殊:1个数据库可以有多个instance(rac) 一台服务器上同时可装多套版本的数据库软件,每个数据库软件可建多个数据库,但是每个数据库只对应一个instance,也可以理解成每个数据库只有一个SID . 利用DBCA建出的每个库都是相对独立

HDFS节点详解

设计思想 分而治之:将大文件.大批量文件,分布式放在大量服务器上,以便于采取分而治之的方式对海量数据进行预算分析: 在大数据系统中的作用:为各类分布式运算框架(如:MapReduce,Spark等)提供数据存储服务 重要概念:文件切块,副本存放,元数据 HDFS架构 HDFS各节点 NameNode是HDFS的主节点,负责元数据的管理以及客户端对文件的访问.管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(Blockreport) DataNode是HDFS的从

kettle连接hadoop&amp;hdfs图文详解

1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情况,由于kettle资料网上较少,所以最好去官网找,官网的url: http://wiki.pentaho.com/display/BAD/Configuring+Pentaho+for+your+Hadoop+Distro+and+Version 打开这个url 到页面最下面的底端,如下图: ar

kettle入门(三) 之kettle连接hadoop&amp;hdfs图文详解(转)

1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情况,由于kettle资料网上较少,所以最好去官网找,官网的url: http://wiki.pentaho.com/display/BAD/Configuring+Pentaho+for+your+Hadoop+Distro+and+Version 打开这个url 到页面最下面的底端,如下图: ar

kettle入门(三) 之kettle连接hadoop&amp;hdfs图文详解

1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把原始文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情况,由于kettle资料网上较少,所以最好去官网找,官网的url: http://wiki.pentaho.com/display/BAD/Configuring+Pentaho+for+your+Hadoop+Distro+and+Version 打开这个url 到打开页面最下面的底端如下图: arc

hadoop1中hdfs原理详解

HDFS是Hadoop Distribute File System的简称,也是Hadoop的一个分布四文件系统 一.HDFS的主要设计理念 1.存储超大文件 这里的 “超大文件” 是指几百MB .GB甚至 TB级别的文件. 2.最高效的访问模式是一次写入.多次读取(流式数据访问)  HDFS存储的数据集作为hadoop的分析对象,在数据集生成后,长时间在此数据集上进行各种分析.每次分析都将设计该数据的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要. 3.运

NUMA体系结构详解

1. NUMA的几个概念(Node,socket,core,thread) 对于socket,core和thread会有不少文章介绍,这里简单说一下,具体参见下图: 一句话总结:socket就是主板上的CPU插槽; Core就是socket里独立的一组程序执行的硬件单元,比如寄存器,计算单元等; Thread:就是超线程hyperthread的概念,逻辑的执行单元,独立的执行上下文,但是共享core内的寄存器和计算单元. NUMA体系结构中多了Node的概念,这个概念其实是用来解决core的分组