2016年2月29日星期一

Hadoop技术内幕——深入解析MapReduce架构设计与实现原理 读书笔记(1)


Hadoop 1.0.0 源代码阅读,需要先安装以下软件。
很可惜,即便一切照做了,导入的文件也各种报错。

1、Java 1.6.0下载
http://www.oracle.com/technetwork/java/javase/archive-139210.html

2、Apache Ant 1.6.0下载
http://archive.apache.org/dist/ant/binaries/
http://archive.apache.org/dist/ant/binaries/apache-ant-1.6.0-bin.zip

3、Eclipse下载
http://www.eclipse.org/downloads/packages/release/Galileo/SR2
http://archive.eclipse.org/technology/epp/downloads/release/galileo/SR2/eclipse-jee-galileo-SR2-linux-gtk-x86_64.tar.gz

4、Hadoop 1.0源代码
http://svn.apache.org/repos/asf/hadoop/common/branches/
http://svn.apache.org/repos/asf/hadoop/common/branches/branch-1/
https://archive.apache.org/dist/hadoop/common/hadoop-1.0.0/
https://github.com/apache/hadoop/tree/branch-1

2016年2月15日星期一

Google的Bigtable学习笔记(不保证正确性)

Google的Bigtable学习笔记(不保证正确性)
1、首先是一个列式存储的简单数据模型的数据库,它比键值对模型/文档模型NoSQL数据库复杂点(也就更强一点)。
2、它的分布式存储性能依靠于GFS也就对单机房网络有硬性指标。
3、它同时提供了相对均衡的顺序读写操作,也就更适用于这样的应用。
4、保证SSTable不变的结构简化了读写冲突所产生的问题复杂性。同时允许不同的tablet共享一个SSTable。
5、memtable的设计减少了大量的读写冲突,双线程+序列允许归并写入,鉴于较小概率的读恢复操作,major compaction在排序时候借助写时候留存的序号进行去重,简化了写操作。
6、高级别的缓存针对访问相同数据进行的缓存服务比较容易被想到,但是块级别的缓存解决了顺序读的读写效率,是值得学习的。
7、因为row key是依照字典序进行排序的,所以在应用级别对row key的选择就是设计的一个重心。
8、字典序的设计对跨行更新以及分布式事务都提出了挑战,但是这个系统并不适用于解决类似的问题。
9、提供了无限的列结构以及column families,是它强于键值对模型/文档模型NoSQL数据库的地方,等价于自建了各种索引。也就是所谓的半结构化数据。
10、Tablets服务器对于主服务器的依赖较低,因为主服务器仅与有限的Tablets服务器进行通信,只负责解决它们的生存问题,而不用解决直接的来自于用户的请求。
11、利用Chubby进行分布式锁机制,使用了文件句柄的冲突检测来实现对于分布式服务器的管理,并配合了主服务器对Tablets的心跳检测,实现了完整的检测,在加上自杀和他杀技术的使用,使得整套系统得到了较高的可靠性。
12、两段式压缩对于类似于不同的时间点对相类似的数据进行存储后的压缩能够做到较好的压缩比,因为内容重复度比较高。

http://research.google.com/archive/bigtable-osdi06.pdf