1. 程式人生 > >技術分享丨從Hadoop到Spark,看大資料框架發展之路

技術分享丨從Hadoop到Spark,看大資料框架發展之路

談到大資料框架,不得不提Hadoop和 Spark,今天我們進行歷史溯源,幫助大家瞭解Hadoop和Spark的過去,感應未來。

在Hadoop出現前人們採用什麼計算模型呢?是典型的高效能HPC workflow,它有專門負責計算的compute cluster,cluster memory很小,所以計算產生的任何資料會儲存在storage中,最後在Tape裡進行備份,這種workflow主要適用高速大規模複雜計算,像核物理模擬中會用到。在這裡我還是要推薦下我自己建的大資料學習交流qq裙:458345782, 裙 裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料開發相關的),包括我自己整理的一份2019最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴。

 

HPC workflow在實際應用中存在一些問題,這些問題促進了Hadoop的出現。

首先如果想對大量進行簡單計算,比如對Search logs 進行“what are the popular keywords”計算,這時是否可以用HPC workflow?當然可以,但卻並不適合,因為需要做的計算非常簡單,並不需要在 high performance compute cluster中進行。

其次由於資料量大,HPC workflow是I/O bound,計算時間只有1個微秒,但剩下的100個微秒可能都需要等資料,這時候compute cluster就會非常空閒,因此HPC同樣不不適用於 specific use。

另外HPC主要在政府部門、科研等領域使用,成本高昂,不適合廣泛推廣。

如果不能把資料移到計算的地方,那為什麼不轉換思維,把計算移到資料裡呢?

所以Google在2003至2006年發表了著名的三大論文——GFS、BigTable、MapReduce,解決怎麼樣讓framework 挪到有資料的地方去做,解決了資料怎麼儲存,計算及訪問的問題。

在Google 發出三大論文後,Yahoo用相同的框架開發出JAVA語言的project,這就是Hadoop。Hadoop Ecosystem在十年多時間發展的如火如荼,其核心就是HDFS,Mapreduce和Hbase。

HDFS很好地實現了資料儲存的以下特性要求:

Cheap

High availability

High throughput

High scalability

Failure detection and recovery

大家從圖中可以看到HDFS資料讀取和寫入的過程,這個Architecture非常穩定,當資料量越來越大時Namenode從一個發展為多個,使記憶體增大,產生了Namenode Federation。

資料儲存已經實現,那如何進行計算呢?

如果有1PB size log,當需要計數時, 一個machine肯定無法計算海量資料,這時候可能需要寫Multi-threads code,但也會存在程序壞了,效能不穩定等問題,如果Data Scientist還要寫multi-threats程式是非常浪費時間的,這時候Mapreduce 就應運而生,目的是讓framework代替人來處理複雜問題,使人集中精力到重要的資料分析過程中,只需要通過code Map和Reduce就可以實現資料運算。

讓我們來思考下:在一次Mapreduce中至少需寫硬碟幾次?

至少3次!

開始從HDFS中讀取資料,在Mapreduce中計算,再寫回HDFS作為 Intermediate data,繼續把資料讀出來做reduce,最後再寫回HDFS,很多時候做meachine learning需要不斷迭代,一次程式無法算出最終結果,需要不斷迴圈。

迴圈過程一直往硬盤裡寫,效率非常低,如果把中間資料寫入記憶體,可以極大提高效能,於是Spark出現了

當把資料從HDFS中讀出來到記憶體中,通過spark分析,Intermediate data再存到記憶體,繼續用spark進行分析,不斷進行迴圈,這樣Spark會很大地提高計算速度。

 

Spark在2009年由AMPLab開發,吸取了很多Hadoop發展的經驗教訓,比如Hadoop對其他語言支援不夠,Spark提供了Java,Scala,Python,R這些廣泛受到Data Scientist歡迎的語言

那Spark與Hadoop的區別有什麼?

Spark比Hadoop使用更簡單

Spark對資料科學家更友好(Interactive shell)

Spark有更多的API/language支援(Java, python, scala)

想要系統、全面地學習Hadoop跟Spark?

在這裡我還是要推薦下我自己建的大資料學習交流qq裙:458345782, 裙 裡都是學大資料開發的,如果你正在學習大資料 ,小編歡迎你加入,大家都是軟體開發黨,不定期分享乾貨(只有大資料開發相關的),包括我自己整理的一份2019最新的大資料進階資料和高階開發教程,歡迎進階中和進想深入大資料的小夥伴。