写程序的时候,规模小,尚不能感觉设计模式的重要性。等规模一上来,需求一迭代,一个应用了恰当设计模式的工程,总能以最小的代价进行最快的迭代。
但是一个奇怪的点是,我总记不住具体的实现所对应的设计模式的名字,但是对他们背后的设计思想,却是念念不忘——依赖于抽象而非具体;对扩展开放,对修改关闭;
Hadoop 源码阅读之DFS(三):FileSystem
一些有意思的细节
编程中有很多有意思的细节,看到了,就记在这里。
|
简化判断
一堆数按位或,只要有多于一个数为负,则结果为负。
1 | public void write(byte b[], int off, int len) throws IOException { |
from: FilterOutputStream
Hadoop 源码阅读之DFS(二):DataNode
上一篇把一些零碎的小类集在一起,凑成一篇。这篇打算对比较长的一个类DataNode
读读。
每个DataNode代表一个数据节点,对应某台机器的一个文件夹,本质上是一定数量的Block的集合,能够和NameNode,client以及其他DataNode进行通信,以对该Block集合进行操作,主要包括client的读和写,其他DataNode block的复制,以及响应NameNode操作,进行删除等操作。
具体实现来说,数据结构上,维持了一个block到byte array的表;执行时,DataNode内部是一个无限循环,不断询问NameNode,报告状态(心跳),执行命令(RPC)。
- 状态信息。[
DataNodeInfo
](/hadoop-source-DFS#datanode-info):总大小,剩余大小,上次更新时间。 - 执行命令。
- 客户端读写Blocks
- 让其他DataNode复制Blocks
- 删除某些Blocks
此外,DataNode还维持着一个Server Socket以处理来自Client或者其他DataNode请求。DataNode会将其对外暴露的host:port提交给NameNode,后者会将该信息进一步下发给相关的其他DataNode或者client。
(摘自类注释)
Hadoop 源码阅读之DFS(一):一些基本的类
计划花一个月左右的时间,通读一遍Hadoop 0.1.0的源码,尽量少写一些废话,多记录一些思考。
Random一下,就从分布式文件系统(DFS)开始吧。
DFS即分布式文件系统,集合多台机器存储在预定义位置上的一组文件作为存储构件,在此基础上实现一些分布式操作,从而对外抽象出一套基本文件读写API。
Hadoop-0.1.0代码调试运行
之前雄心勃勃的从GitHub上下了Hadoop源码,想要通读涨涨姿势,甚至想自己写一个简易版本。
不料代码啃起来味同嚼蜡,在读了基本的RPC之后,就此搁置。