本书以Hadoop HDFS为载体,介绍了构建一款分布式系统(尤其是存储方向)所需的核心技术,所有内容均基于当前较新的3.3.x/3.4.x版本,分别从理论和实践两个维度逐一阐述。本书主要包括两篇:核心原理篇介绍了HDFS的诞生历史、元数据及Block管理、节点间通信机制、读写数据流程和高可用实现原理等;拓展与实践篇从实际出发,充分考虑了用户在应用过程中会遇到的痛点,详细介绍了集群拓展方法、数据分层存储、集群维护与多租户实施等实践经验。
本书各章节都配有必要的流程图和原理分析图,便于读者阅读理解,并精选了非常有用的实际案例及拓展知识。阅读本书后,相信会给读者带来1 1>2的效果。
本书非常适合大数据从业者、云计算领域研发及运维人员、高校研究生和热衷于分布式的技术极客阅读学习。
1. 互联网大厂技术专家倾力之作,大数据从业者入门。
2. 140分钟讲解视频扫码即可观看。
3. Hadoop项目源代码免费下载。
在数据规模爆炸式增长的今天,复杂的业务场景对数据的使用提出了更高的要求,数据需具备良好的容错能力,集群服务应拥有健壮的稳定性。 Hadoop HDFS自诞生至今,一直都是大数据领域事实上的分布式存储基座,已经得到众多企业支持,包括Cloudera、Uber、腾讯、美团、等。据了解,不少生产环境集群节点达到万台以上,可以轻松应对多场景业务类型的访问。在开源社区,HDFS始终保持较高关注度,版本迭代也很快。至本书撰写前夕,Hadoop版本已经来到3.4。荣幸之至,作者也贡献了部分feature。
由于工作的关系,作者日常接触到不少和集群有关的问题,慢慢地也有了一些经验积累。这里分享几个编写本书的初衷:
虽然HDFS已经被广泛应用于大数据领域,且直接或间接从事和HDFS有关的人员很多,如研发工程师、运维工程师,但大多数人对HDFS这款分布式系统的认识只停在熟悉的阶段,还远未达到理解的程度,因此迫切需要一本既有广度、又兼顾深度的指导书籍。
作者此前专职从事过较长时间和HDFS有关的研发与运维工作,也正是在这段时期提升了自己分布式系统架构设计的能力,同时还掌握了较为丰富的一线集群管理经验。希望能够将这些总结和个人的理解分享给读者。
尽管市面上存在一些和Hadoop相关的图书,但调研后发现大多数书中内容较浅,缺乏广度和系统性。希望本书可以弥补这些遗憾。
1. 读者对象
本书适合以下读者阅读。
1)大数据从业者,如中高级开发人员、架构师、技术经理。
2)想要系统学习分布式架构设计的技术人员和运维人员。
3)想要提高分布式系统研发水平的人员。
4)目前在云计算领域工作,想要拓宽自己技术能力的专业人员。
5)在高校学习的研究生,或有一定基础的高年级本科生。
2. 本书特色
(1)技术点系统、全面
本书以Hadoop HDFS主流的版本为基准,选择由浅入深的方式,全面细致地介绍了构成分布式存储系统的各项关键组成部分。为照顾到不同层次的读者,每章都配置了原理解析、流程分析图,以及必要的实践指导。
(2)具备较高的实用指导价值
在编写本书前,作者收集了很多行业内从业者在集群维护过程中遇到的痛点。书中选用的案例均来源于现实或非常典型的案例,对应的解题思路和实践方案均得到验证,具有很强的实用性,方便读者查阅和参考。
(3)技术启发性强
一本好的技术书籍,不应局限于介绍产品本身,还应与读者产生共鸣,这也是作者希望看到的。作者在这里提醒读者,在阅读本书时要留意两点:一是注意不同章节间的关联;二是留意每章后面的拓展改进部分。
3. 本书内容
本书分为两大篇,共10章。
第1章介绍成熟的分布式系统架构框架及其影响因素、Hadoop HDFS发展历史、组件特色和包含的主要模块。
第2章介绍元数据,包括元数据信息、结构分析、拓展优化等。
第3章介绍HDFS管理存储数据的方法,涉及众多的内部运行原理、Namespace服务、数据节点服务等一些非常关键的部分。
第4章介绍Block和副本。详细介绍了HDFS是如何管理它们及生命周期、数据自愈等。可以说理解了本章内容,就充分了解了数据在HDFS系统中的存在方式。
第5章介绍Client与不同节点服务的通信原理,以及数据读写流程。
第6章介绍高可用机制,包括QJM和HA实现原理、ZKFC服务、隔离机制,以及可改进的方法。
第7章介绍缓存在分布式系统中的实现方法,列举了一些适用缓存的场景及后续版本的迭代计划。
第8章介绍在使用过程中拓展集群的方法。详细说明了水平拓展、垂直伸缩的策略及参考实现,非常具有实用指导价值。
第9章介绍想要实现合理的数据分层是如何做到的。这部分知识是超大集群维护过程中必须掌握的。
第10章介绍如何高效建设集群监控体系、多租户管控方法等。此外,还介绍了当下非常有价值的发展方向Data Lakes。
4. 如何阅读本书
对于没有接触过分布式系统或大数据领域的读者,建议按照顺序从第1章开始阅读。
对于了解过Hadoop部分原理的运维人员或初级开发者,建议也按照顺序从第1章开始阅读,这对于全面了解HDFS很有益处。
对于做过HDFS相关研发的中高级开发者,可选择从第2章开始阅读。
本书是按照由浅入深的方式编写的,读者在阅读过程中,尤其是阅读本书后面的章节时,应该加入自己的思考,这样才可以达到事半功倍的学习效果。
5. 勘误与支持
创作须始终保持严谨的态度,作者每完成一章都会反复核验。奈何水平有限,书中难免会出现不足之处,在此恳请读者批评指正。读者如在书中遇到需要解答的地方,欢迎发送邮件至zhujh.inx@gmail.com,作者将尽可能回复每一封邮信。期待能够得到读者的真挚反馈!
6. 致谢
感谢机械工业出版社的张淑谦老师在这一年多的时间里始终支持我的写作,并给予了非常多的帮助和建议。没有他的鼓励和帮助,这本书不会那么顺利完成。
感谢Apache社区的小伙伴,是你们让我学到更多。
后,感谢所有支持、鼓励和帮助过我的人。谨以此书献给我亲爱的家人、朋友们!
祝江华
2022年初冬于杭州
祝江华,大数据技术专家。多年来一直供职于头部互联网公司,积累了较为丰富的大数据行业一线研发和集群维护经验;热爱开源,长期活跃在Apache开源社区,对包括Hadoop生态在内的多款组件有过深入研究;分布式技术极客,擅长分布式存储方向,同时对大数据计算、数据湖等也有丰富实战经验。
第1篇 核心原理篇
第1章 HDFS历史延展/
1.1 分布式与文件系统/
1.1.1 分布式文件系统部署架构/
1.1.2 系统性能的影响因素/
1.2 HDFS设计及实现思想/
1.2.1 HDFS发展历史/
1.2.2 HDFS特性/
1.2.3 HDFS服务视图/
1.2.4 HDFS架构/
1.3 小结/
第2章 元数据架构/
2.1 内存Tree设计/
2.1.1 Namenode介绍/
2.1.2 Namenode启动/
2.1.3 meta视图/
2.1.4 FsDirectory和INodeMap/
2.1.5 文件维护/
2.2 FsImage和Edit Log/
2.2.1 FsImage分析/
2.2.2 Edit Log分析/
2.3 meta更新/
2.3.1 内存结构Update/
2.3.2 拓展:锁优化/
2.4 小结/
第3章 数据管理/
3.1 Namespace/
3.1.1 Namespace概况/
3.1.2 Namenode与Namespace/
3.1.3 DataNode与Namespace/
3.2 Slave节点/
3.2.1 Heartbeat机制/
3.2.2 FsDataset和DataStorage/
3.2.3 DataNode检查器/
3.2.4 存储类型/
3.2.5 拓展:NVDIMM/
3.3 Topology(Rack) Awareness/
3.3.1 Topology Awareness在分布式存储中的意义/
3.3.2 Topology Awareness在HDFS中实现/
3.3.3 Topology改进/
3.4 小结/
第4章 Block与副本/
4.1 理解Block/
4.1.1 Block构成解析/
4.1.2 副本存储解析/
4.2 Block状态管理/
4.2.1 UnderConstruction/
4.2.2 Committed/
4.2.3 Complete/
4.2.4 UnderRecovery/
4.2.5 Block状态小结/
4.3 副本状态管理/
4.3.1 RBW/
4.3.2 finalized/
4.3.3 RWR/
4.3.4 RUR/
4.3.5 Temporary/
4.3.6 副本状态小结/
4.4 Block管理/
4.4.1 无效Block/
4.4.2 损坏Block/
4.4.3 缺失与冗余Block/
4.4.4 Block Recovery/
4.5 副本策略/
4.5.1 位置策略/
4.5.2 选盘(Volume)策略/
4.5.3 选盘策略改进/
4.6 小结/
第5章 通信与访问/
5.1 HDFS RPC/
5.1.1 Protocol Buffers介绍/
5.1.2 RPC架构/
5.1.3 非幂等访问/
5.2 文件写入/
5.2.1 数据包(packet)与Pipeline/
5.2.2 数据写入/
5.2.3 Lease管理与pipeline Recovery/
5.3 数据访问/
5.3.1 文件读剖析/
5.3.2 short-circuit/
5.3.3 读写策略改进/
5.4 小结/
第6章 HA和QJM/
6.1 HA发展路径/
6.2 Quorum Journal Manager/
6.2.1 分布式一致性原理/
6.2.2 Edit共享存储系统/
6.2.3 QJM架构设计/
6.2.4 Edit Recovery/
6.3 HA原理/
6.3.1 ZKFC解析/
6.3.2 HA隔离机制/
6.3.3 Multi-Standby特性/
6.3.4 HA优化及改进/
6.4 小结/
第7章 缓存/
7.1 分布式系统缓存设计/
7.1.1 本地缓存/
7.1.2 分布式缓存/
7.2 集中式缓存管理/
7.2.1 原理介绍/
7.2.2 缓存调度/
7.2.3 DataNode缓存原理/
7.2.4 Cache&Uncache场景/
7.3 缓存实践场景及改进/
7.3.1 实践场景介绍/
7.3.2 集中式缓存V2/
7.4 小结/
第2篇 拓展与实践篇
第8章 集群拓展/
8.1 水平拓展/
8.1.1 水平拓展策略及实践/
8.1.2 Router-Based Federation/
8.2 垂直伸缩/
8.2.1 垂直伸缩策略及实践/
8.2.2 HDFS Quotas/
8.3 多Namespace业务规划/
8.4 小结/
第9章 数据分层/
9.1 存储分层的意义/
9.2 HDFS存储分层/
9.2.1 冷热集群分层管理/
9.2.2 异构分层存储/
9.2.3 动态感知数据类型/
9.3 纠删码(Erasure Coding)/
9.3.1 EC使用介绍/
9.3.2 常见EC算法介绍/
9.3.3 EC读写解析/
9.4 数据迁移/
9.4.1 DistCp迁移/
9.4.2 FastCopy迁移/
9.5 小结/
第10章 监控、多租户和数据湖/
10.1 大数据监控/
10.1.1 基础设施监控采集/
10.1.2 故障自愈/
10.2 多租户与认证/
10.2.1 多租户存储规划/
10.2.2 基于Kerberos的认证/
10.2.3 基于Delegation Token的认证/
10.3 HDFS与Data Lakes/
10.4 小结/