漫谈Hadoop的思想之源:Google
(一)Google介绍 谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和谢尔盖·布林共同创建,被公认为全球最大的搜索引擎。 谷歌是一家位于美国的跨国科技企业,业务包括互联网搜索、云计算、广告技术等,同时开发并提供大量基于互联网的产品与服务,其主要利润来自于AdWords等广告服务。 1999年下半年,谷歌网站“Google”正式启用。 20
(一)Google介绍
谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和谢尔盖·布林共同创建,被公认为全球最大的搜索引擎。
谷歌是一家位于美国的跨国科技企业,业务包括互联网搜索、云计算、广告技术等,同时开发并提供大量基于互联网的产品与服务,其主要利润来自于AdWords等广告服务。1999年下半年,谷歌网站“Google”正式启用。 2010年3月23日,宣布关闭在中国大陆市场搜索服务。2015年8月10日,宣布对企业架构进行调整,并创办了一家名为Alphabet的“伞形公司”(Umbrella Company),成为Alphabet旗下子公司。2015年,在2015年度“世界品牌500强”排行中重返榜首,苹果和亚马逊分别位居第二和第三名。2016年6月8日,《2016年BrandZ全球最具价值品牌百强榜》公布,以2291.98亿美元的品牌价值重新超越苹果成为百强第一。2017年2月,Brand Finance发布2017年度全球500强品牌榜单,排名第一。 2017年6月,《2017年BrandZ最具价值全球品牌100强》公布,谷歌公司名列第一位。
(二)Hadoop的思想之源:Google
Hadoop的思想之源是什么呢,就是我们非常熟悉的一个东西,就是Google,Google是一个搜索引擎,我相信在过去的几年里,不管你是做IT的,还是不是做IT的,或多或少多会接触过Google。如果你没接触过Google,在今天,可能你的生活质量会受到影响。
Google搜索引擎,Gmail,安卓(我们手机上用的操作系统,android也是google的产品),Google Map,Google学术(在学术界的人,经常就用Google学术),Google earth,Google 翻译,Google +(社交产品),说了这么多,Google的服务也在不断的扩展中,我们也无法预料Google下一阶段会出什么产品。
(三)Google的低成本之道
- 不使用超级计算机,不使用存储(淘宝的去I,去o,去e之路)
- 大量使用普通的PC服务(去掉机箱,外设,硬盘),提供有冗余的集群
- 全世界多个数据中心,有些附带发电厂
- 运营商向Google倒付费。
提及数据中心,除传统意义机房、冷却的大型“落地”部署数据中心,Sun最早提出集装箱数据中心的概念,并于06年推出了全球首个集装箱数据中心产品Blackbox,但在Sun被Oracle收购后并没有真正推广应用。
但是集装箱数据中心市场的发展并没有因此停滞不前。相反,越来越多的IT厂商开始涉足这一领域,Google、微软等厂商在集装箱数据中心市场展开了比拼。
集装箱数据中心充分发挥了模块化设计的优势,可以实现系统的快速、灵活部署,这不仅可以大幅降低建设成本,而且能够大幅缩短数据中心的建设周期。集装箱数据中心是一个预配置的完整解决方案,可以随时移动到任何地点,只要有电和网络就能工作,从而省去了用于土地审批和厂房建设的大量资金,节约了成本。
就搜索巨头谷歌来说,为了满足应用的需求习惯自己设计和开发服务器、存储系统等。从2005年开始,Google就在数据中心里采用了集装箱式设计,每个集装箱能容纳1160台服务器。Google集装箱数据中心有许多特别之处,其中主要是自用并不具备通用性。
Google集装箱数据中心的设计着重于“电源在上,水在下”,机架从集装箱的天花板悬挂下来,冷却设备在机架下面,让冷空气通过机架。冷却风扇速度可变,并可以精确管理,保证风扇在能够冷却机架的前提下运行在最低速度。
(五)Google面对的数据和计算难题
大量的网页怎么存储
搜索算法
Page-Rank计算问题
(六)倒排索引:
google如何快速的搜索网页,能够在0.0000000几秒就能够将数据搜索出来呢,这里面主要使用了一个倒排索引的技术。
首先假设有一篇文章,将这篇文章分词,(我爱北京天安门),假如有一种分词(我,爱,北京,天安门)索引怎么做呢,首先单词ID是一个编号,唯一标识号,后面的倒排列表是什么意思呢,(1;1)表示这个单词出现在标识号为1的那个网页里面,它的偏移量是第一个位置,我们在查找的时候,Google会查找这张表,查到我这个单词,在右边会得到一系列的倒排列表,通过倒排列表我们可以把文章找出来,通过偏移量我们可以定位该词的位置。对于西文,由于单词之间有空格,相对来说比较容易分词,对于中文,日文,由于词汇之间没有明显的分界,所以相对来说分词会比较难,其中有一种方法就是使用字典。(讲解我爱北京天安门得劲分词)。当然中文的分词还有很多,百度今天之所以这么成功,是因为它对中文的分词能力是比较强的。关于研究这个语言的分词是一个很大的学术领域,在今天有很多的数据科学家在这里面工作。
(七)page Rank算法:
这是Google最核心的算法,用于给每个网页价值评分,是google“在垃圾中找黄金”的关键算法,这个算法成就了今天的Google。
Google并没有公开发表过pageRank这个算法,这个算法是根据Google早期发表的一些论文大家推测出来的,具体现在google怎么计算呢,我也不知道,但是大体的思想还是这个思想,在一些具体的运算会有一些更加复杂的地方。我们这个模型尽管对大家来说已经很复杂了,但是对Google来说还是很简单的。Google今天不会这么简单来算的。
自从Google有了PageRank之后,它可以把垃圾变为黄金,他可以在一大堆垃圾数据,爬虫怕回来的数据里面找到用户所需要的东西,所以Google的用户体验要比其它的搜索引擎要好,所以用户都聚集在Google搜索平台上面,把其它的搜索引擎就都淘汰掉了,所以Google能称为今天的巨人绝对不是偶然的,PageRank在这里面起到了非常非常重要的作用。
Pagerank的想法是怎么样的呢,非常简单,我们怎么样判断一个页面的价值呢,根据页面的文字数来判断么,这个当然不可能,根据访问量,这个页面点击的越多,我们认为这个页面越有价值,这个听起来很有道理,但事实上是行不通的,因为google爬虫在爬取这个网页的时候,它不可能获取这个网页的点击数,点击数只有站长才知道,其它人是不知道的,所以也不能作为一个根据。google只能根据它从网页爬取的网页的信息来进行判断。Google的想法是怎么样的呢,根据页面的链接关系来判断一个页面的价值,如果有一个页面他被别人指向的越多,像四号页面,大家都指向它,就说明他是比较重要的,若有一个页面大家都不指向他,1号页面,说明1号页面就不是一个很重要的页面。可能有人认为这个太简单了,我把这个页面拿回来,数数里面的链接数就可以了,其实,也没有那么简单,还有一个问题就是这个网站的价值本身是不一样的,如果你的个人网站有另外一个个人网站指向你,这个好像没有什么稀奇,但如果中国国务院的网站指向你,就说明你比较重要了,这里有一个问题,就是中国国务院的网站的价值跟某位同学的网站的价值是完全不一样的,或者用Google的说法可以这么说,如果有一个pageRank比较高的网站指向你,跟一个PageRank比较低的网站指向你,这两个链接指向你的价值是不一样的,我么在计算的时候需要把这个因素考虑进去。
下面我们看一下Google是怎么样建立数学模型,并且求解出PageRank的,我们首先根据网页互相指向的信息,先做一个简单的情况,有1,2,3,4,四个网站,它们之间互相指来指去,首先根据互相指向的信息,得到一个Google矩阵,这个矩阵的每一个列代表网页,第一列,代表是第一个网页,第二列,代表是第二个网页,以此类推,每一行也代表一个网页,第一行代表第一个网页,第二行,代表是第二个网页,以此类推。我们首先看第一列,这里面有0,也有非0的值,0就代表没有连接,非0代表有连接,1没有链接指向自己,所以这里是0,1有连接指向2,所以这里是非零值,同样,1有连接指向3,所以这里页是非零值,四也一样,这里有一个问题,1/3是如何来的呢,原因很简单,每一列一共有1个权值,它有三个外链出去,所以每个链就分到1/3,所以这里就是1/3了,第二列就是第二个网页向外指出的情况,比如说,第二个网页有一个链接指向3,所以在第二列第三行有一个非零值,第二列这有一个链接指向4,所以在第二列第四行也有一个非零值,有两个外链共同来分权值1,所以每个能分为1/2,余下的两列也依此类推,google的矩阵就是这么来的。
之后该如何计算呢,要对Google矩阵做一点点轻微的调整,使用公式
G=αS+(1-α)U/n
其中S就是我们刚刚求出来的原始矩阵,α是0到1之间的一个数,这个数字会经常做调整,调整以后,可以影响PageRank的值,这个α是Google的工程师根据他们的经验来决定,这个α值具体取多少,才可以是pageRank的区分效果最好,这个是他们通过大量的实验摸索出来的,这个我们不需要管,现在也有可能使用机器学习来计算这个值。n是节点的数,这里就是4.U是一个全部元素都是1的矩阵,我们用这个(1-α)U/n矩阵加上αS矩阵,就形成了真正的google矩阵。pageRank是什么东西呢,是这个矩阵的特征值,以及特征向量,是这个矩阵的特征向量,特征向量是什么意思呢,我们把这个矩阵G乘以一个向量,加入这个矩阵是4乘以4的话,q应该是有四个元素的列向量,我们需要找一个q,使这个G乘以q,结果还是等于q,因此我们把求页面价值的问题,转为求一个很庞大的矩阵的特征值的问题。变成一个数学问题。这个特征值一般采用迭代的方法来算,我们给一个原始的向量q,q可以随意写,把这个元素不断地乘以G,Google在它的论文里面证明了,这样一直迭代下去,它一定是收敛的。所以我们可以预先设定一个阈值,当迭代到一定的次数后,q与上一次迭代出来的q的距离小于这个阈值,我们就停止迭代的过程。就把这个q拿出来作为一个近似解,这个就是pageRank,我就算出来了。
数学上轻描淡写,非常简单,实际上我们用计算机上来算的时候是不是那么简单呢,这个肯定没有那么简单,为什么,大家想一想就知道了,这个矩阵有多大呢,不说多了,假设有一百万个网页,这个已经是很小的一个数字了,因为Google有上亿个网页。假设为1百万个网页的时候,矩阵的元素有多少呢,一百万乘以一百万,一万个亿,在任何一台服务器都是无法实现的,只能证明理论上是可行的,并且特征向量是符合我们要求的东西,编写程序的时候是无法实现的。所以产生了Map-reduce 思想。
(八)Map-Reduce想法
如果什么运算是一台计算机解决不了的,那么就是很多台计算机来解决。所以Google采用了不仅一台计算机来算,而是很多台计算机采用分布式的方式来以。如下图所示,每一个节点里面都会被分配这个矩阵里面的若干个列,在现实中我们可以理解,其实我们的网页在现实中分布在很多服务器节点上面。每个服务器都存放了若干个网页,但不会存放全部的网页,从网页上我们能分析出,它有哪些外链指向出来,因此Google矩阵的某个列在这个节点上是能够算出来的。如何算,我生成一个特征向量,有q1,q2,q3,q4,…,qn。假设第一个节点有2个列,我通过网络把q1,q2送过来,给第一个节点,假设第二个节点有两个列,我通过网络把q3,q4送过来,其它节点以此类推,在第一个节点我算q1乘以第一个列,q2乘以第二个列,算出这个列的结果,第二个节点依此类推。由于每个节点的网页数都不会很多,所以每个节点都可以很快的计算出结果出来。最后把所有算出来的结果发到一个共同的目标节点,在该节点把所有的列加起来,由于节点数有限,因此目标节点将所有的列都加起来也不是很困难的事情,因此我们在目标节点处得到一个向量,迭代第一步产生的特征向量。将该项不同的列的值量重新分配到各个节点上,在进行计算,计算后在汇总到该节点上,产生新的特征向量,不断的迭代,迭代到收敛值为止,知道产生符合的结果。通过这个方法,pageRank就可以进行计算了,这种用分散的节点来分负荷进行计算的思想,就是我们今天所说的map-reduce。我们将一个巨大的任务,我们认为不可能完成的任务,通过map映射到各个节点,来进行分布式计算。在每个节点算出这个值之后,最后汇总到一个节点上去,这个汇总的过程,我们把它叫Reduce,reduce之后,我们又把汇总的结果分散到各个节点上去,在map一次,又重新计算,在reduce一次。反复Map-reduce很多次以后,这个page-rank就被我们算出来了。
GFS(Google file system)----Hadoop的HDFS
Map-Reduce--Hadoop Map-Reduce
Bigtable----Hbase
今天的漫谈就讲到这里了,小编感谢大家的观看,觉得好的话,请支持小编。
更多推荐
所有评论(0)