HDFS详解(看书笔记)

当数据集大小超过一台独立的物理计算机的存储能力时,就有必要对他进行分区并存储在若干台单独的计算机上。管理网络中跨多台计算机存储的文件系统称为分布式文件系统(distributed filesystem)。
Hadoop自带一个称为HDFS的分布式文件系统。HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上。

1. HDFS的设计

  • 超大文件
    超大文件的意思是hdfs能够处理的数据规模达到GB,TB,PB了。
  • 流式数据访问
    [数据就像水流一样流动访问]HDFS的构建思路是:一次写入,多次读取是最高效的访问模式。
  • 商用硬件
    hadoop并不需要运行在昂贵且高可靠的硬件上。
  • 低时间延迟的数据访问
    要求低延迟数据访问的应用,不适合在HDFS上运行。HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价。
  • 大量的小文件
    由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存总量。
    [元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。------来自百度百科]
  • 多用户写入,任意修改文件
    HDFS中的文件写入只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据。它不支持多个写入者的操作,也不支持在文件的任意位置进行修改。

2. HDFS的概念

  • 数据块
    [每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统的块]
    HDFS也有块的概念,但是大得多,默认为128MB。与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元。但与面向单一磁盘的文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间,(我的理解是一个块最大为128M,3M也是一个块)
    HDFS中的块为什么这么大?
    HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需要的时间。因而,传输一个由多个块组成的大文件的时间取决于磁盘的传输速率。
  • namenode和datanode
    HDFS有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但它不永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。
    客户端(Client)代表用户通过与namenode和datanode交互来访问整个文件系统。客户端提供一个类似于POSIX(可移植操作系统界面)的文件系统接口,因此用户在编程时无需知道namenode和datanade也可以实现功能。
    datanode是文件系统的工作节点。他们根据需要存储并检索数据块(受客户端或namenode调度),并且定期向namenode发送他们所存储的块的列表。
  • 块缓存
    通常datanode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示地缓存在datanode的内存中,以堆外快缓存的形式存在。
  • 联邦 HDFS
    namenode 在内存中保存文件系统中每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈。
    在2.x 发行版本系列中引人的联邦HDFS允许系统通过添加namenode实现扩展,其中每个namenode 管理文件系统命名空间中的一部分。
    例如,一个namenode 可能管理/user 目录下的所有文件,而另一个namenode 可能管理/share目录下的所有文件。
    在联邦环境下,每个namenode 维护个命名空间卷(namespace volume),由命名空间的元数据和个 数据块池(block pool)组成,数据块池包含该命名空间下文件的所有数据块。命名空间卷之间是相互独立的,两两之间并不相互通信,甚至其中一个namenode的失效也不会影响由其他namenode维护的命名空间的可用性。
    数据块池不再进行切分,因此集群中的datanode 需要注册到每namenode,并且存储着来自多个数据块池中的数据块。

3. 命令行接口

文件系统的基本操作

4. Hadoop文件系统

  • 接口

HTTP
C语言
NFS
FUSE

5. Java接口

从HadoopURL读取数据
通过FileSystemAPI读取数据
写入数据
目录
查询文件系统
删除数据

6. 数据流

剖析文件读取
剖析文件写入
一致模型

7. 通过distcp并行复制

保持HDFS集群的均衡

猜你喜欢

转载自blog.csdn.net/Kruskual/article/details/108457809