hadoop分布式文件系统

Hadoop分布式文件系统

分布式文件系统:管理网络中跨多台计算机存储的文件系统称为分布式文件系统。

提出背景:当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(partition)并存储到若干台单独的计算机上。

Hadoop的分布式文件系统称为HDFS(Hadoop Distributed Filesystem)。

HDFS的设计

HDFS以流式数据访问模式来存储超大文件,运行在商用硬件集群上。

  1. 超大文件:可以时几百MB、几百GB甚至几百TB大小的文件。
  2. 流式数据访问:HDFS的构建思路是:一次写入、多次读取。这是最高效的访问模式。
  3. 商用硬件:可以运行在普通硬件的集群上。节点故障率较高。HDFS遇到故障时,被设计成能够继续运行且不让用户察觉到明显中断。
  4. 低时间延迟的数据访问:要求低时间延迟数据访问的应用,不适合在HDFS上运行。
  5. 大量小文件:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。
  6. 多用户写入,任意修改文件:HDFS中的文件可能只有一个writer,而且写操作总是将数据添加在文件的末尾。不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。

HDFS的概念

数据块

HDFS也有块(block)的概念,比磁盘的数据块大得多,默认为64MB。

HDFS上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。但HDFS中小于一个块的文件不会占据整个块的空间。

为什么HDFS中的块如此之大?

HDFS的块比磁盘的块大,其目的是为了最小寻址开销。

对块进行抽象的好处:

  1. 一个文件的大小可以大于网络中任意一个磁盘的容量。
  2. 使用抽象块而非整个文件作为存储单元,大大简化了存储子系统的设计

namenode与datanode

HDFS集群有两类节点以管理者-工作者模式运行,即一个namenode和多个datanode

namenode

namenode管理文件系统的命名空间。维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但并不是永久保存块位置信息,而是在系统启动时由数据节点重建。

datanode

datanode是文件系统的工作节点。它们根据需要存储并检索数据块,并且定期向namenode发送它们所存储的块的列表。

如果HDFS集群没有namenode节点会怎么样?

没有namenode节点,文件系统将无法使用,文件系统上所有的文件将会丢失。

解决方法:

1.备份那些组成文件系统元数据持久状态的文件

2.运行一个辅助namenode,即secondary namenode。

联邦HDFS

namenode在内存中存储的方式意味着内存将成为限制系统横向发展的瓶颈。

在2.x发行版系统中引入联邦HDFS允许系统通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间的一部分。

例如:一个namenode可能管理/user目录下的所有文件,而另一个namenode可能管理/share目录下的所有文件

在联邦环境下,每个namenode维护一个命名空间卷。命名空间卷之间相互独立,两两之间并不互相通信,互不影响。

数据块池不进行切分,因此datanode需要注册到所有namenode,并存储来自多个数据块池的数据。

你可能感兴趣的:(hadoop,hadoop,大数据,hdfs)