一、HDFS简介
- Hadoop Distributed filesystem:Hadoop分布式文件系统
- HDFS以流式数据访问模式来存储超大文件。一次写入、多次读取。能存储PB级的数据。
- 运行在普通硬件上。因为HDFS可以防止宕机时数据丢失。
- HDFS是为高数据吞吐量应用优化的,间接提高了时间延迟,所以对于低延迟的的访问需求,最好使用HBase。
- 不适合存储大量的小文件。namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。
- HDFS中的文件只有一个writer,而且写操作总是将数据添加在文件的末尾,他不支持具有多个写入者的操作,也不支持在文件的任意位置进行修改。
二、HDFS相关概念
1.数据块
传统磁盘块:每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以使磁盘块的整数倍。文件系统块一般为几千字节,而磁盘块一般为512字节。
-
HDFS中的块(block):默认为64MB(根据需要修改)。HDFS上的文件也被划分为块大小的多个分块,作为独立的存储单元。
1.HDFS的块比磁盘的块大,目的是为了最小化寻址开销。 2.块不能设置的过大,map任务通常一次只处理一个块中的数据,任务数过少会影响运行速度。 3.HDFS中的块是抽象的。 好处一:一个文件的大小可以大于网络中任何一个磁盘的容量。 好处二:简化了存储子系统的设计。 好初三:块非常适合用于数据备份进而提供数据容错能力和提高可用性。
2.namenode和datanode
HDFS集群有两类节点:一个namenode(管理者)和多个datanode(工作者)。
- namenode管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时由数据节点重建。
- 客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。
- datanode是文件系统的工作节点。根据需要存储并检索数据块,并定期向namenode发送它们所存储的块的列表。
namenode的两种容错机制
- 机制一:备份组成文件系统元数据持久状态的文件。将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统。
- 机制二:运行一个辅助namenode,作用是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。这个辅助namenode一般在另一台单独的物理计算机上运行,它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。
3.HDFS的高可用性
Hadoop的2.X发行版本中,配置了一对活动-备用namenode,当活动namenode失效,备用namenode就会将接管他的任务并开始服务于来自客户端的请求,不会有任何明显中断。实现这一目标需要在架构上做如下修改:
- namenode之间需要通过高可用的共享存储实现编辑日志的共享。当备用namenode接管工作之后,它将通读共享编辑日志直至末尾,以实现与活动namenode的状态同步,并继续读取由活动namenode写入的新条目。
- datanode需要同时向两个namenode发送数据块处理报告,因为数据块的映射信息存储在namenode的内存中,而非磁盘。
- 客户端需要使用特定的机制来处理namemode的失效问题,这一机制对用户是透明的。
4.数据流
3.png
4.png