前言

Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。

它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

体系结构

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。

HDFS设计原则

HDFS设计之初就非常明确其应用场景,适用与什么类型的应用,不适用什么应用,有一个相对明确的指导原则。

设计目标

  • 存储非常大的文件:这里非常大指的是几百M、G、或者TB级别。实际应用中已有很多集群存储的数据达到PB级别。根据Hadoop官网,Yahoo!的Hadoop集群约有10万颗CPU,运行在4万个机器节点上。更多世界上的Hadoop集群使用情况,参考Hadoop官网.
  • 采用流式的数据访问方式: HDFS基于这样的一个假设:最有效的数据处理模式是一次写入、多次读取数据集经常从数据源生成或者拷贝一次,然后在其上做很多分析工作 分析工作经常读取其中的大部分数据,即使不是全部。 因此读取整个数据集所需时间比读取第一条记录的延时更重要。
  • 运行于商业硬件上: Hadoop不需要特别贵的、reliable的(可靠的)机器,可运行于普通商用机器(可以从多家供应商采购) ,商用机器不代表低端机器。在集群中(尤其是大的集群),节点失败率是比较高的HDFS的目标是确保集群在节点失败的时候不会让用户感觉到明显的中断。

HDFS不适合的应用类型

有些场景不适合使用HDFS来存储数据。下面列举几个:

1) 低延时的数据访问 对延时要求在毫秒级别的应用,不适合采用HDFS。HDFS是为高吞吐数据传输设计的,因此可能牺牲延时HBase更适合低延时的数据访问。

2)大量小文件 文件的元数据(如目录结构,文件block的节点列表,block-node mapping)保存在NameNode的内存中, 整个文件系统的文件数量会受限于NameNode的内存大小。 经验而言,一个文件/目录/文件块一般占有150字节的元数据内存空间。如果有100万个文件,每个文件占用1个文件块,则需要大约300M的内存。因此十亿级别的文件数量在现有商用机器上难以支持。

3)多方读写,需要任意的文件修改 HDFS采用追加(append-only)的方式写入数据。不支持文件任意offset的修改。不支持多个写入器(writer)。

本文深度剖析Hadoop HDFS

而本文基于Hadoop 2.7.1版本,全面描述HDFS 2.X的核心技术与解决方案。

对HDFS的几个主要使用场景进行了细粒度剖析,包括源码分析,融入了作者多年的开发经验

本文基于Hadoop 2.7.1版本进行分析,全面描述了HDFS 2.X的核心技术与解决方案。

文中描述了HDFS内存存储、异构存储等几大核心设计,包括源码细节层面的分析,对于HDFS的几个主要使用场景也做了细粒度的分析。还分享了作者在实际应用中的解决方案及扩展思路。

阅读本文可以帮助读者从架构设计与功能实现角度了解HDFS 2.x,同时还能学习HDFS 2.X框架中优秀的设计思想、设计模式、Java语言技巧等。这些对于读者全面提高自已分布式技术水平有很大的帮助。



目录








主要内容

本书分为三大部分:核心设计篇、细节实现篇、解决方案篇,
“核心设计篇”包括HDFS的数据存储原理、HDFS的数据管理与策略选择机制、HDFS的新颖功能特性;


第1章本章将从HDFS的数据存储开始说起,因为正是先有了数据的存储,才有后续的写人和管理等操作。HDFS的数据存储包括两块:一块是HDFS内存存储,另一块是HDFS异构存储。HDFS内存存储是- -种十分特殊的存储方式,将会对集群数据的读写带来不小的性能提升,而HDFS异构存储则能帮助我们更加合理地把数据存到应该存的地方。




第2章本章我们要学习HDFS的数据管理,HDFS有独特的数据管理方式和策略选择。本章首先介绍HDFS缓存方面的管理,包括缓存块与DataNode数据之间的交互,HDFS整体的中心缓存机制的实现原理。第二介绍HDFS的快照管理,快照在很多应用的场景下可以用来进行数据的故障恢复,在HDFS中,它有相似的作用。第三介绍经典的三副本策略,及其在HDFS中如何做到数据的高可用性。第四介绍HDFS的Sasl认证与Blocktoken验证机制以及二者实现的差别。最后介绍DataNode内部的三大“数据保镖”服务: VolumeScanner、DirectoryScanner以及DiskChecker。



第3章本章介绍HDFS中的一些“非主流"的功能特性,这些功能并不是不好,而是说它很少被人用到,容易被大家忽视。本章首先介绍HDFS的视图文件系统ViewFileSystem。谁说HDFS.上的路径是一成不变的?ViewF's可以让你随意变更存储的路径名称。其次介绍WebHDFS,WebHDFS的出现可以使得用户使用HDFS的成本变得更为简单。第三介绍HDFS数据加密空间Encryptionzone,在加密空间下,你看到的将只会是一堆加密的数据流。第四介绍HDFS EC纠删码技术,这是用户非常期待的-一个特性,它能够解决当下由于三副本备份策略导致的存储空间浪费的问题。第五介绍HDFS对象存储技术Ozone,它使得用户将数据存入到HDFS中变得更容易。




第二部分“细节实现篇”包括HDFS的块处理、流量处理等细节,以及部分结构分析;
第4章本章主要介绍 HDFS 存储数据的最小单元:块。 了解块处理过程对于排除问题具有十分重要的意义 本章分为 个方面 首先介绍块检查命令 fsck ,此节将会告诉我们块丢失了怎么查 其次介绍 HDFS 中多余块的删除方法 最后介绍块的上报处理过程,了解块在NameNo 中的周转过程




第5章本章将介绍HDFS中比较特殊的处理过程:流量处理。Hadoop集群随着规模的扩增,有的时候每日的吞吐量会很大,此时了解它内部的流量处理细节非常有帮助。本章主要从HDFS的内部限流、HDFS的Balancer数据平衡以及DiskBalancer磁盘间数据平衡三方面的内容来进行学习。前两部分内容是应用场景中经常碰到的,而DiskBalancer则是拓展的内容。



第6章本章我们将会学习了解HDFS内部一些特殊的结构对象和过程的分析,了解这些对象的特殊作用或是其独特的设计。本章主要分为3个部分。第一节, HDFS镜像文件的解析与反解析过程。第二节,HDFS的数据处理过程以及数据处理中心对象DataXceiver。第三节,HDFS邻近信息块对象BlockInfoContiguous,此节内容将会让我们了解到块对象是如何被组织起来的。




第三部分“解决方案篇”包括HDFS的数据管理、HDFS的数据读写、HDFS的异常场景等。
第7章在本章中,我们将会学习到在真实应用环境中的一些实践经验。比如说对HDFS正常读写的限流方案,又比如说HDFS的数据规模的监控,以此帮助我们了解目前集群的一-个数据统计情况。还有关于HDFS上的数据以及DataNode迁移的方案。最后是笔者在实践过程中做过的稍微简单一些的操作,比如HDFS的重命名方案以及配置化管理操作。




第8章本章我们将会介绍两个局部的改造。与前一章不同,本章的改造内容需要基于Hadoop源代码进行,改造的目标对象都是磁盘。因为HDFS每天的读写操作都会经过磁盘,所以对其进行优化、改造也是必不可少的。本章将会介绍两方面的改造,第- -,磁盘选择策略改造,目前是采用轮询的方式进行磁盘的选择。第二,“慢磁盘”的监控改造,此监控能够让我们马上发现“慢磁盘”,并将其从节点中进行移除。




第9章本章将为大家介绍几个笔者在工作过程中遇到的HDFS异常场景以及解决方法。首先是DataNode的慢启动问题,DataNode启动在有的时候需要花费接近5分钟的时间。其次是Hadoop节点在中止下线操作后,会出现大量多余块的情况。最后是HDFS在读写数据时发生的线程泄露问题,线程泄露类似于内存泄露问题,是--个比较严重的问题。



全文内容知识点总结

  • 缓存管理、快照管理的优势与侧重点。
  • HDFS比较新颖的一些功能,以及一些比较少被人使用到的功能特性。
  • 流量处理的详细过程,包括HDFS目前流量处理的场景以及Balancer工具的数据平衡原理和优化。
  • 多套运维管理的操作方案,包括数据迁移、数据监控等。
  • HDFS写磁盘时的-些优化技巧和改造方案。
  • HDFS部分发生异常的场景,以及相应的解决办法。
本文是华为18级大牛推荐学习的,希望能够帮助到大家的学习,拿到自己理想的薪资和工作!
需要这份资料的小伙伴,可以加助理的的微信(bjmsb506)即可。