漫談Hadoop的思想之源:Google
(一) 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就被我們算出來了。
(九)Google帶給我們的思想
GFS(Google file system)—-Hadoop的HDFS
Map-Reduce–Hadoop Map-Reduce
Bigtable—-Hbase
今天的漫談就講到這裡了,小編感謝大家的觀看,覺得好的話,請支援小編。
Hadoop,Hbase,Nutch,Sorl 安裝教程
課程介紹:
本課程將主要面向之前未接觸過Hadoop,Hbase,Nutch,Solr的學員,講解如何安裝該四個軟體。能夠將Nutch抓取的網頁資料放到Hbase中儲存,建立索引放到Solr中,並通過SolrJ獲取到資料。
課程特色:
專屬答疑+課件資料提供+視訊無限時回放+VIP交流群
開課時間:
隨到隨學,自由支配
點我試看:http://edu.csdn.net/course/detail/6031?utm_source=blog11
相關文章
- Hadoop Map Reduce 漫談Hadoop
- UIAppearance漫談UIAPP
- Flink漫談
- 從Google Spanner漫談分散式儲存與資料庫技術XAGo分散式資料庫
- 漫談逆向工程
- 漫談全景分割
- 新特性:postgresql的vacuum漫談SQL
- 漫談負載均衡負載
- 隨機數漫談隨機
- 漫談CUDA優化優化
- 面試——談談你對Java 物件導向思想的理解面試Java物件
- 漫談對大資料的思考大資料
- 請用物件導向的思想,談一談面試的過程物件面試
- 談談Hadoop MapReduce和Spark MR實現HadoopSpark
- 【MySQL】四、Insert buffer 漫談MySql
- 漫談 SLAM 技術(上)SLAM
- PHP安全性漫談PHP
- iOS APP 架構漫談iOSAPP架構
- GIS資料漫談(三)
- 多執行緒的風險漫談執行緒
- 從Express到Nestjs,談談Nestjs的設計思想和使用方法ExpressJS
- 老生常談之Flux與Redux思想Redux
- 【Hadoop】按照map-reduce的思想試述完整的pagerank計算過程Hadoop
- [前端漫談_1] 從 for of 聊到 Generator前端
- 漫談Web快取架構Web快取架構
- 效能優化漫談之一優化
- 效能優化漫談之二優化
- 漫談計算機架構計算機架構
- oracle數值型別漫談Oracle型別
- 漫談計算機編碼計算機
- babel知識體系漫談Babel
- 漫談網站優化提速網站優化
- 漫談程式和執行緒執行緒
- 路在何方?漫談國產GalGame的未來GAM
- Alink漫談(四) : 模型的來龍去脈模型
- 淺談物件導向中的一些主要思想物件
- 《程式設計師漫畫》| 萌新面試Google程式設計師面試Go
- 荒野之息漫談:東方情致的韻味