Hadoop之HDFS概念与体系结构

HDFS是什么

Hadoop Distributed File System(简称HDFS)是Hadoop分布式文件系统。

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

HDFS是一个分布式文件系统,这里科普一下什么是分布式文件系统:

当数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 (Distributed File System)。

  • 分布式文件系统的定义:

是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

  • 分布式文件系统特点:
  • 通透性。

让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

  • 容错。

即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

注意:分布式文件管理系统很多,HDFS只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。

HDFS的体系结构

NameNode
  • NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
  • 文件包括:hdfs-site.xml的name.dir属性

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。

edits:操作日志文件。

fstime:保存最近一次checkpoint的时间

  • 以上这些文件是保存在linux的文件系统中。
DataNode

DataNode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。

  • 文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个。可以在配置里指定dfs.block.size属性的大小.
  • 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
  • Replication指定多副本。默认是三个。hdfs-site.xml的dfs.replication属性。
Secondary NameNode

是HA的一种解决方案,主要起到两种作用:镜像备份以及日志和镜像定期合并,这两个过程称之为checkpoint。

镜像备份:备份fsimage(fsimage是元数据发送检查点时写入文件);

日志与镜像的定期合并的作用:将Namenode中edits日志和fsimage合并,防止(如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中,应用edit log,edit log往往很大,导致操作往往很耗时。)

Secondary NameNode的工作流程:
  1. secondary通知namenode切换edits文件
  2. secondary从namenode获得fsimage和edits(通过http)
  3. secondary将fsimage载入内存,然后开始合并edits
  4. secondary将新的fsimage发回给namenode
  5. namenode用新的fsimage替换旧的fsimage

 

什么时候checkpiont
  1. checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。
  2. checkpoint.size规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

HDFS的工作模式

Hadoop之HDFS概念与体系结构

HDFS是一个的主从结构,一个HDFS集群是由一个NameNode,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些DataNode,通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。

内部机制是将一个文件分割成一个或多个块,这些块被存储在一组DataNode中。NameNode用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与DataNode的映射。DataNode来负责来自文件系统客户的读写请求。DataNode同时还要执行块的创建,删除,和来自NameNode的块复制指令。

NameNode和DataNode都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行NameNode或DataNode,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。典型的部署是由一个专门的机器来运行NameNode软件,集群中的其他每台机器运行一个DataNode实例。体系结构不排斥在一个机器上运行多个DataNode的实例,但是实际的部署不会有这种情况。

集群中只有一个NameNode极大地简单化了系统的体系结构。NameNode是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过NameNode。

 

  • Hadoop之HDFS概念与体系结构已关闭评论
  • 184 views
  • A+
所属分类:未分类
avatar