- 大數據處理框架Apache Spark設計與實現
- 許利杰等
- 993字
- 2024-01-19 16:36:19
1.3 大數據應用及編程模型
大數據應用一般是指為滿足業務需求,運行在大數據處理框架之上,對大數據進行分布處理的應用,如Hadoop MapReduce應用和Spark應用。大數據應用在工業界和學術界廣泛存在,如網頁索引的構建、日志挖掘、大數據SQL查詢、機器學習、社交網絡圖分析等。
針對不同的大數據應用,需要解決的問題是如何將其轉化為可以運行在特定大數據處理框架之上的程序。為了解決這一問題,大數據處理框架為用戶提供了簡單且具有擴展性的編程模型。沒有任何并行和分布式應用開發經驗的用戶也可以通過簡單的編程模型來開發數據密集型應用。目前通用的大數據處理框架,如Hadoop、Dryad和Spark,都是以MapReduce編程模型為基礎的。MapReduce編程模型可以被簡單地表示為
map階段:map<;K1,V1>;?list<;K2,V2>;
reduce階段:reduce<;K2,list(V2)>;?list<;K3,V3>;
在圖1.1中,WordCount應用使用MapReduce框架來統計一篇英文文章中每個單詞出現的次數。我們首先將文章(Page)按行拆分為多個分塊(input split),圖1.1中的Page被拆分為4個分塊,每個分塊有兩行,每行包含行號(lineNo)和該行的內容(line)。在map階段,我們對每一行執行map(K=lineNo,V=line)函數。該函數對line進行分詞,并統計line中每個word(w)出現的次數。例如,line 1中包含5個w1和2個w2,就輸出兩個鍵值對(record),即<;w1,5>;和<;w2,2>;。在reduce階段,我們將包含相同詞的record聚合在一起,形成<;word,list(count)>;。例如,將多個<;w1,count>;record聚合為<;w1,list(5,1,9,6)>;,之后對list中的值(Value)進行累加,得到并輸出<;w1,21>;。
從計算框架來說,Hadoop支持標準的MapReduce編程模型,并得到了廣泛使用。然而,MapReduce編程模型也存在一些局限性。例如,該模型不能直接對多張表格數據進行join()。為了提高MapReduce編程模型的通用型,Dryad和Spark設計了一些更一般的、對用戶更友好的操作符(operator),如flatMap()、groupByKey()、reduceByKey()、cogroup()和join()等。這些操作基于map()和reduce()的函數式編程思想構建,可以表達更復雜的數據處理流程。

圖1.1 WordCount應用的MapReduce執行流程
除了基于如上所述的編程模型開發大數據應用,用戶也可以借助構建于框架之上的高層語言或者高層庫來開發大數據應用。例如,在Hadoop MapReduce之上,Yahoo!開發了SQL-like的Pig Latin語言[12],可以將SQL-like腳本轉化成Hadoop MapReduce 作業;Facebook開發的分布式數據倉庫Hive[13]構建在Hadoop MapReduce之上,也可以將類SQL查詢分析語言轉化成Hadoop MapReduce作業;Apache Mahout[14]提供了基于Hadoop MapReduce 的機器學習庫;在Spark之上,GraphX[15]提供了面向大規模圖處理的庫,MLlib[16]提供了面向大規模機器學習的庫,Spark SQL[17]提供了基于Spark的SQL查詢框架及語言。