Hadoop权威指南 系列学习-关于HDFS

HDFS的设计

  Hadoop自带一个称为HDFS的分布式文件系统,即Hadoop Distributed FileSystem。在非正式文档或旧文档以及配置中心中,有时也简称为DFS

数据块

 每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建与单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块。该文件系统块的大小可以是磁盘块的整数倍。

 HDFS同样也有块(block)的概念,但是大得多,默认为128MB。与单一磁盘上的文件系统相似,HDFS上的文件也被花费为块大小的多个分块(chunk),作为独立的存储单元。

 好处:

  1.一个文件的大小可以大于网络中任意一个磁盘的容量。文件的所有块并不需要存储在同一个磁盘上,因此他们可以利用集群上的任意一个磁盘进行存储。

  2.使用抽象块而非整个文件作为存储单元,大大简化了存储子系统的设计。

  3.块还非常适合用于数据备份进而提供数据容错能力和提高可用性。将每个块复制到少数几个物理上相互独立的机器上(默认为3个),可以确保在块、磁盘或机器发生故障后数据不会丢失。如果发现一个块不可用,系统会从其他地方读取另一个副本,而这个过程对用户是透明的

  HDFS中fsck指令可以显示块信息。执行以下命令将列出文件系统中各个文件由哪些块构成

  hdfs fsck / -files -blocks

namenode 和 datanode

  HDFS 集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间。它维护者文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。

  客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统,客户端提供一个类似于POSIX(可移植操作系统界面)的文件系统接口,因此用户编程时无需知道namenode和datanode也可实现其功能。

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

  没有namenode,文件系统将无法使用。事实上,如果运行namenode服务的机器毁坏,文件系统上所有的文件将会丢失,因为我们不知道如何根据datanode的块重建文件。因此,对namenode实现容错非常重要,Hadoop为此提供两种机制。

  第一种机制是备份哪些组成文件系统元数据持久状态的文件。Hadoop可以通过配置是namenode在多个文件系统上保存元数据的持久状态。这些写操作是实时同步的,且是原子操作。一般的配置是,将持久状态写入本地磁盘的同事,写入一个远程挂载的网络文件系统(NFS)。

  另一种可行的方法是运行一个辅助namenode,但它不能被用做namenode。这个辅助namenode的重要作用是定期合并编辑日志和命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量CPU时间,并且需要

    

posted on 2019-11-27 09:43  帝落少年  阅读(123)  评论(0编辑  收藏  举报

导航