HDFS学习(1)---(namenode、datanode、Block)

时间:2019-01-17
本文章向大家介绍HDFS学习(1)---(namenode、datanode、Block),主要包括HDFS学习(1)---(namenode、datanode、Block)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

概念

HDFS:Hadoop Distribute File System—>Hadoop 分布式文件系统。

HDFS的特点

  • 超大文件:”超大文件“在这里指具有几百MB,几百GB甚至几百TB大小的文件。
  • 流式数据访问 :HDFS的构建思路是,一次写入、多次读取是最高效的访问模式。
  • 商用硬件:Hadoop并不需要运行在昂贵且可靠的硬件上。它是设计运行在商用硬件(在各种零售店都能买得到的普通硬件)的集群上的,因此至少对于庞大的集群来说,阶段的故障率还是非常高的。HDFS遇到上述故障时,被设计成能继续运行且不让用户察觉到明显的中断。
  • 低时间延迟的数据访问:要求低时间延迟数据访问的应用,例如几十毫秒范围,不适合在HDFS上运行。HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价,目前对于低延迟的访问需求,HBase(参见第20章)是更好的选择。
  • 大量的小文件:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。
  • 多用户写入,任意修改文件:HDFS中的文件写入只支持单个写入者,而且写操作总是以”只添加“方式在文件末尾写数据。它不支持多个写入者的操作,也不支持在文件任意位置进行修改。

namenode和datanode

HDFS集群中有两类节点 ----》管理节点和工作节点

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

NameNode
存储元数据信息,在内存和文件(fsimage,edits ,fsTime)中同时存在
内存中:文件及目录结构 组成文件的块的信息 副本数量信息 块和DataNode的映射关系 [/aaa/bbb/x.txt [b1,b2] 3 b1:DN01 DN02 DN03 b2:DN02 DN04 DN05]
文件中:文件及目录结构 组成文件的块的信息 副本数量信息 [/aaa/bbb/x.txt [b1,b2] 3]

DataNode
是HDFS的工作节点,真正存储数据的节点,以Block为单位来存储数据,DataNode并不直到也不关心Block属于哪个文件,只是根据要求以Block为单位处理数据。DataNode定期向NameNode发送它们所存储的块的列表。

对NameNode的容错

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

第二种机制:运行一个辅助Namenode,但它并不能被用作Namonode,这个辅助namenode的重要作用是定期合并并编辑日志与命名空间镜像,以防止编辑日志过大,这个辅助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量CPU时间,并且需要与namenode一样多的内存来执行合并操作。它会保存合并后的命名空间镜像的复本,并在namenode发生故障时启用。但是辅助namenode保存的状态总是滞后于主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下一般把存储在NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行(注意:也可以运行热备份namenode代替运行辅助namenode)

块缓存

通常datanode从磁盘中读取块,但是对于访问频繁的文件,其对应的块可能被显式的缓存在DataNode的内存中,以堆外块缓存(off-heap block cache)的形式存在。

用户或应用通过在缓存池(cache pool)中增加一个cache directive来告诉namenode需要缓存哪些文件及存多久。缓存池是一个用于管理缓存权限和资源使用的管理性分组。