浅析google的分布式三篇论文
Hadoop是仿照google的三篇论文写的一个分布式计算框架,所以必然免不了分布式系统要解决的问题;
1、分布式存储GFS ,google 有非常庞大的数据,几台甚至几百台大型服务器都无法存下,所以干脆采用廉价PC,保存在成千上万台上,这样节省了资源,但是由此也带来了很多问题,细想一下,把数据存储在很多机器上会带来什么问题?首先我要知道我的文件存到了哪个PC上,一个PC坏了是不是我的数据就丢了?所以要进行备份,具体怎么备份,这个应该可以配置,比如某个数据要有几个备份,从而请求备份的时候要做负载均衡;修改某台PC的数据其它上面的数据也要跟着修改,否则数据就不一致了啊?.......带着这些问题,想想google会怎么解决这些问题?对,他们就是GFS,GFS对开发者是完全透明的,我们对数据的删除,修改,等操作,是透明的,我们创建一个文件完全不必去考虑我们创建的文件放在哪儿了,对GFS帮忙做了
2、BigTable说白了就是一个key/value 用惯了key/value的数据结构,比如一个hashMap (key,value) ,bigTable只不过是用(行,列,时间t)作为key,t一般用来保存数据的版本号;
如图:
链接锚文字: <a href="www.baidu.com">百度</a> “百度”就是链接锚文字;
BigTable 提供针对行数据的事务操作,底层存储为GFS,直白点BigTable就是在GFS上的一个应用而已,类比windows的文件系统,sqlServer数据库系统就是建立在windows文件系统之上的,不同之处BigTable是个分布式的海量存储系统;关键点:子表,介绍到此为止,省略了太多的细节,深入点的话去看论文;
判断某个主键是否在某个子表时:用到算法Bloom Filter http://blog.csdn.net/jiaomeng/article/details/1495500
这种算法的特点:有可能把不属于这个集合的元素误认为属于这个集合(False Positive),但不会把属于这个集合的元素误认为不属于这个集合(False Negative)。在增加了错误率这个因素之后,Bloom Filter通过允许少量的错误来节省大量的存储空间。
备注:GFS、BigTable 实时性应该不会很好
Paxos协议:http://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B3%95
3、数据都存储好了,接下来要进行计算了,map/reduce模型,负责将一个大任务,分配成许多小任务,然后分配到众多机器上去执行;底层怎么实现对开发者应该是透明的;我们需要注意的是如何将大任务进行map,如何进行reduce (即:如何将一个任务分配到许多机器上去执行,遵循什么原则)
map/reduce编程模型:http://www.cnblogs.com/pingyuyue/archive/2012/02/22/2363372.html
应用场景:1、爬虫网页去重 2、建立倒排索引