老李分享大資料生態圈 1

來源:互聯網
上載者:User

標籤:

大資料本身是個很寬泛的概念,Hadoop生態圈(或者泛生態圈)基本上都是為了處理超過單機尺度的資料處理而誕生的。你可以把它比作一個廚房所以需要的各種工具。鍋碗瓢盆,各有各的用處,互相之間又有重合。你可以用湯鍋直接當碗吃飯喝湯,你可以用小刀或者刨子去皮。但是每個工具有自己的特性,雖然奇怪的組合也能工作,但是未必是最佳選擇。

 

        大資料,首先你要能存的下大資料。

 

        傳統的檔案系統是單機的,不能橫跨不同的機器。HDFS(Hadoop Distributed FileSystem)的設計本質上是為了大量的資料能橫跨成百上千台機器,但是你看到的是一個檔案系統而不是很多檔案系統。比如你說我要擷取/hdfs/tmp/file1的資料,你引用的是一個檔案路徑,但是實際的資料存放在很多不同的機器上。你作為使用者,不需要知道這些,就好比在單機上你不關心檔案分散在什麼磁軌什麼扇區一樣。HDFS為你管理這些資料。

 

        存下的資料之後,你就開始考慮怎麼處理資料。雖然HDFS可以為你整體管理不同機器上的資料,但是這些資料太大了。一台機器讀取成T上P的資料(很大的資料哦,比如整個東京熱有史以來所有高畫質 DVD的大小甚至更大),一台機器慢慢跑也許需要好幾天甚至好幾周。對於很多公司來說,單機處理是不可忍受的,比如微博要更新24小時熱博,它必須在24小時之內跑完這些處理。那麼我如果要用很多台機器處理,我就面臨了如何分配工作,如果一台機器掛了如何重新啟動相應的任務,機器之間如何互相通訊交換資料以完成複雜的計算等等。這就是MapReduce/ Tez/Spark的功能。MapReduce是第一代計算引擎,Tez和Spark是第二代。MapReduce的設計,採用了很簡化的計算模型,只有Map和Reduce兩個計算過程(中間用Shuffle串聯),用這個模型,已經可以處理大資料領域很大一部分問題了。

 

        那什麼是Map什麼是Reduce?

 

        考慮如果你要統計一個巨大的文字檔儲存在類似HDFS上,你想要知道這個文本裡各個詞的出現頻率。你啟動了一個MapReduce程式。Map階段,幾百台機器同時讀取這個檔案的各個部分,分別把各自讀到的部分分別統計出詞頻,產生類似(hello, 12100次),(world,15214次)等等這樣的Pair(我這裡把Map和Combine放在一起說以便簡化);這幾百台機器各自都產生了如上的集合,然後又有幾百台機器啟動Reduce處理。                        Reducer機器A將從Mapper機器收到所有以A開頭的統計結果,機器B將收到B開頭的詞彙統計結果(當然實際上不會真的以字母開頭做依據,而是用函數產生Hash值以避免資料串化。因為類似X開頭的詞肯定比其他要少得多,而你不希望資料處理各個機器的工作量相差懸殊)。然後這些Reducer將再次匯總,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每個Reducer都如上處理,你就得到了整個檔案的詞頻結果。

        這看似是個很簡單的模型,但很多演算法都可以用這個模型描述了。Map+Reduce的簡單模型很黃很暴力,雖然好用,但是很笨重。第二代的Tez和Spark除了記憶體Cache之類的新feature,本質上來說,是讓Map/Reduce模型更通用,讓Map和Reduce之間的界限更模糊,資料交換更靈活,更少的磁碟讀寫,以便更方便地描述複雜演算法,取得更高的輸送量。

        有了MapReduce,Tez和Spark之後,程式員發現,MapReduce的程式寫起來真麻煩。他們希望簡化這個過程。這就好比你有了組合語言,雖然你幾乎什麼都能幹了,但是你還是覺得繁瑣。你希望有個更高層更抽象的語言層來描述演算法和資料處理流程。於是就有了Pig和Hive。Pig是接近指令碼方式去描述MapReduce,Hive則用的是SQL。它們把指令碼和SQL語言翻譯成MapReduce程式,丟給計算引擎去計算,而你就從繁瑣的MapReduce程式中解脫出來,用更簡單更直觀的語言去寫程式了。

有了Hive之後,人們發現SQL對比Java有巨大的優勢。一個是它太容易寫了。剛才詞頻的東西,用SQL描述就只有一兩行,MapReduce寫起來大約要幾十上百行。而更重要的是,非電腦背景的使用者終於感受到了愛:我也會寫SQL!於是資料分析人員終於從乞求工程師幫忙的窘境解脫出來,工程師也從寫奇怪的一次性的處理常式中解脫出來。大家都開心了。Hive逐漸成長成了大資料倉儲的核心組件。甚至很多公司的流水線作業集完全是用SQL描述,因為易寫易改,一看就懂,容易維護。

        自從資料分析人員開始用Hive分析資料之後,它們發現,Hive在MapReduce上跑,太慢了!流水線作業集也許沒啥關係,比如24小時更新的推薦,反正24小時內跑完就算了。但是資料分析,人們總是希望能跑更快一些。比如我希望看過去一個小時內多少人在可穿戴手環頁面駐足,分別停留了多久,對於一個巨型網站海量資料下,這個處理過程也許要花幾十分鐘甚至很多小時。而這個分析也許只是你萬裡長征的第一步,你還要看多少人瀏覽了電子產品多少人看了拉赫曼尼諾夫的CD,以便跟老闆彙報,我們的使用者是屌絲男悶騷女更多還是文藝青年/少女更多。你無法忍受等待的折磨,只能跟工程師說,快,快,再快一點!

        於是Impala,Presto,Drill誕生了(當然還有無數非著名的互動SQL引擎,就不一一列舉了)。三個系統的核心理念是,MapReduce引擎太慢,因為它太通用,太強壯,太保守,我們SQL需要更輕量,更激進地擷取資源,更專門地對SQL做最佳化,而且不需要那麼多容錯性保證(因為系統出錯了大不了重新啟動任務,如果整個處理時間更短的話,比如幾分鐘之內)。這些系統讓使用者更快速地處理SQL任務,犧牲了通用性穩定性等特性。如果說MapReduce是大砍刀,砍啥都不怕,那上面三個就是剔骨刀,靈巧鋒利,但是不能搞太大太硬的東西。

        這些系統,說實話,一直沒有達到人們期望的流行度。因為這時候又兩個異類被造出來了。他們是Hive on Tez / Spark和SparkSQL。它們的設計理念是,MapReduce慢,但是如果我用新一代通用計算引擎Tez或者Spark來跑SQL,那我就能跑的更快。而且使用者不需要維護兩套系統。這就好比如果你廚房小,人又懶,對吃的精細程度要求有限,那你可以買個電飯煲,能蒸能煲能燒,省了好多廚具。

        上面的介紹,基本就是一個資料倉儲的構架了。底層HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。這解決了中低速資料處理的要求。

老李分享大資料生態圈 1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.