分布式文件系统:管理网络中跨多台计算机存储的文件系统称为分布式文件系统。
提出背景:当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(partition)并存储到若干台单独的计算机上。
Hadoop的分布式文件系统称为HDFS(Hadoop Distributed Filesystem)。
HDFS以流式数据访问模式来存储超大文件,运行在商用硬件集群上。
HDFS也有块(block)的概念,比磁盘的数据块大得多,默认为64MB。
HDFS上的文件也被划分为块大小的多个分块(chunk),作为独立的存储单元。但HDFS中小于一个块的文件不会占据整个块的空间。
为什么HDFS中的块如此之大?
HDFS的块比磁盘的块大,其目的是为了最小寻址开销。
对块进行抽象的好处:
HDFS集群有两类节点以管理者-工作者模式运行,即一个namenode和多个datanode
namenode管理文件系统的命名空间。维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但并不是永久保存块位置信息,而是在系统启动时由数据节点重建。
datanode是文件系统的工作节点。它们根据需要存储并检索数据块,并且定期向namenode发送它们所存储的块的列表。
如果HDFS集群没有namenode节点会怎么样?
没有namenode节点,文件系统将无法使用,文件系统上所有的文件将会丢失。
解决方法:
1.备份那些组成文件系统元数据持久状态的文件
2.运行一个辅助namenode,即secondary namenode。
namenode在内存中存储的方式意味着内存将成为限制系统横向发展的瓶颈。
在2.x发行版系统中引入联邦HDFS允许系统通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间的一部分。
例如:一个namenode可能管理/user目录下的所有文件,而另一个namenode可能管理/share目录下的所有文件
在联邦环境下,每个namenode维护一个命名空间卷。命名空间卷之间相互独立,两两之间并不互相通信,互不影响。
数据块池不进行切分,因此datanode需要注册到所有namenode,并存储来自多个数据块池的数据。