这一年多的时间里,hdfs源码(原理)分析累计也写了30多篇文章了,来一篇文章进行汇总。这篇文章将按照自己的理解来系统的梳理下,应该如何系统的学习hdfs。
先直接上个脑图:
- 入门
首先得了解HDFS是个什么东西,有些什么功能,有哪些比较重要的概念或术语;
然后了解hdfs由哪些组件(模块)构成,分别在整个系统中充当什么角色;
随后自己动手安装部署几遍,包括standalone、HA模式。从安装部署过程中了解有哪些步骤,有哪些配置文件,常用的配置项有哪些,应该如何进行配置才能正确搭建;
安装部署完成后,通过自带的命令进行一些简单的操作,这样会有个整体的概念。
- 基本使用
简单入门后,接下来是通过编写简单示例程序,对hdfs进行操作使用,包括目录的操作(创建、删除目录)、文件的常规操作(创建、读、写、追加写等)等等。
通过这一步后,可以对API有简单了解,同时可以加深一些概念的理解,比如块、副本等。
- 进阶
通过对应api完成一些基本操作后,然后可以进一步深入下hdfs的读写流程,虽然这个读写流程网上的文章随处可见,但还是建议你自己折腾一遍,结合抓包工具、客户端服务端日志、单步调试等手段,了解整个读写流程,甚至可以细到掌握传输数据包的格式是怎样的。
但了解了正常的读写流程就结束了吗?
不,这才刚刚开始!你需要在读写过程中增加大量的异常情况。例如,写过程中,其中一个dn异常会怎样?写过程中,客户端自身异常(例如被kill),此后再追加写同一个文件会怎样?块的默认配置3副本,但实际只有2个dn节点,能不能正确完成写文件操作?等等。。
通过异常测试,观察结果并结合日志、代码分析其中的原因,这样,可以全面掌握读写流程中的细节以及相关原理。
对读写流程这一大块逻辑啃下来后,可以涉猎其他的知识,例如hdfs可以让多用户同时操作,那么首先客户端如何指定文件目录操作的用户?
既然是多用户,那么自然不希望其他用户操作自己的文件目录,那么这就又涉及权限管理。同样,还涉及对不同用户进行存储空间的管理,那么就需要知道配额的功能。
如果普通磁盘不能满足读写性能,考虑上ssd,那么文件如何正确存储到ssd上,以及从ssd上加载,这会涉及hdfs的存储策略、甚至是机架感知、短路读等。
以上都是从用户的角度出发来摸索hdfs的原理,除此之外,hdfs的高可用具体是如何体现,也可以深入去探索研究。
- 高阶及优化
对上面的原理都摸索掌握后,日常的使用可以说是小菜一碟了,那么接下来要考虑的是如何去提升整体的性能了,例如海量的文件存储、数据一致性、大量的读写并发、以及启动速度(通常在异常断电后)等等。
这些涉及了数据在内存中的存储、持久化的存储、元数据的管理、块汇报(增量汇报汇报与全量汇报)、块副本的删除、复制等逻辑,以及启动的流程、持久化文件格式、rpc机制等等。
了解掌握这些原理,同时结合实际的性能测试,处理性能问题能够更加得心应手。
- 运维
最后是运维,简单来说分几个方面,一方面是各种异常情况的处理,这些异常包括磁盘坏了,网络断了,节点异常了,依赖的服务异常了等,hdfs面对这些异常时,自身是如何进行处理的;另一方面是,如何对hdfs进行监测,以掌握整体的健康状态并及时进行必要的处理。最后就是需要手动进行处理的情况了,例如数据进行平衡、坏盘的处理、小文件的归档等等。
以上,就是个人对hdfs的一些总结概括,其中大部分原理有进行过总结(公众号子菜单中能够找到这些文章《深入hdfs系列》),这里就说得相对简单。
另外,还有两个相对比较重要的知识点:EC和联邦,没有列到脑图中,后续有时间进行源码研究后,再总结~