官术网_书友最值得收藏!

第1章

Spark簡介

上善若水,水善利萬物而不爭。

——《道德經》第八章

數據一如水,無色無味,非方非圓,以百態存于自然,于自然無違也。綿綿密密,微則無聲,巨則洶涌;與人無爭卻又容納萬物。

生活離不開水,同樣離不開數據,我們被數據包圍,在數據中生活。當數據越來越多時,就成了大數據。

想要理解大數據,就需要理解大數據相關的查詢、處理、機器學習、圖計算和統計分析等,Spark作為新一代輕量級大數據快速處理平臺,集成了大數據相關的各種能力,是理解大數據的首選。

現在,讓我們以向大師致敬的方式開始學習之旅,向Doug Cutting和Matei Zaharia兩位大師致敬!

1.1 什么是Spark

說起大數據,很多人會想起Doug Cutting以自己兒子玩具小象命名的開源項目Hadoop。Hadoop解決了大多數批處理工作負載問題,成為了大數據時代企業的首選技術。但隨著大數據時代不可逆的演進,人們發現,由于一些限制,Hadoop對一些工作負載并不是最優選擇,比如:

□缺少對迭代的支持;

□中間數據需輸出到硬盤存儲,產生了較高的延遲。

探其究竟,MapReduce設計上的約束比較適合處理離線數據,在實時查詢和迭代計算上存在較大的不足,而隨著具體業務的發展,業界對實時查詢和迭代計算有更多的需求。

2009年,美國加州大學伯克利分校實驗室小伙伴們基于AMPLab的集群計算平臺,立足內存計算,從多迭代批量處理出發,兼顧數據倉庫、流處理、機器學習和圖計算等多種計算范式,正式將Spark作為研究項目,并于2010年進行了開源。

什么是Spark?Spark作為Apache頂級的開源項目,是一個快速、通用的大規模數據處理引擎,和Hadoop的MapReduce計算框架類似,但是相對于MapReduce,Spark憑借其可伸縮、基于內存計算等特點,以及可以直接讀寫Hadoop上任何格式數據的優勢,進行批處理時更加高效,并有更低的延遲。相對于“one stack to rule them all”的目標,實際上,Spark已經成為輕量級大數據快速處理的統一平臺,各種不同的應用,如實時流處理、機器學習、交互式查詢等,都可以通過Spark建立在不同的存儲和運行系統上,下面我們來具體認識一下Spark。

1.1.1 概述

隨著互聯網的高速發展,以大數據為核心的計算框架不斷出現,從支持離線的MapReduce席卷全球,到支持在線處理的Storm異軍突起,支持迭代計算的Spark攻城拔寨,支持高性能數據挖掘的MPI深耕細作。各種框架誕生于不同的實驗室或者公司,各有所長,各自解決了某一類問題,而在一些互聯網公司中,百家爭鳴,各種框架同時被使用,比如作者所在公司的大數據團隊,模型訓練和數據處理采用MapReduce框架(包括基于Hive構建的數據倉庫查詢的底層實現),實時性要求較高的線上業務采取Storm,日志處理以及個性化推薦采取Spark,這些框架都部署在統一的數據平臺上,共享集群存儲資源和計算資源,形成統一的輕量級彈性計算平臺。

1.1.2 Spark大數據處理框架

相較于國內外較多的大數據處理框架,Spark以其低延時的出色表現,正在成為繼Hadoop的MapReduce之后,新的、最具影響的大數據框架之一,圖1-1所示為以Spark為核心的整個生態圈,最底層為分布式存儲系統HDFS、Amazon S3、Hypertable,或者其他格式的存儲系統(如HBase);資源管理采用Mesos、YARN等集群資源管理模式,或者Spark自帶的獨立運行模式,以及本地運行模式。在Spark大數據處理框架中,Spark為上層多種應用提供服務。例如,Spark SQL提供SQL查詢服務,性能比Hive快3~50倍;MLlib提供機器學習服務;GraphX提供圖計算服務;Spark Streaming將流式計算分解成一系列短小的批處理計算,并且提供高可靠和吞吐量服務。值得說明的是,無論是Spark SQL、Spark Streaming、GraphX還是MLlib,都可以使用Spark核心API處理問題,它們的方法幾乎是通用的,處理的數據也可以共享,不僅減少了學習成本,而且其數據無縫集成大大提高了靈活性。

圖1-1 以Spark為核心的輕量級大數據處理框架

基于Hadoop的資源管理器YARN實際上是一個彈性計算平臺,作為統一的計算資源管理框架,不僅僅服務于MapReduce計算框架,而且已經實現了多種計算框架進行統一管理。這種共享集群資源的模式帶來了很多好處。

資源利用率高。多種框架共享資源的模式有效解決了由于應用程序數量的不均衡性導致的高峰時段任務比較擁擠,空閑時段任務比較空閑的問題;同時均衡了內存和CPU等資源的利用。

實現了數據共享。隨著數據量的增加,數據移動成本越來越高,網絡帶寬、磁盤空間、磁盤IO都會成為瓶頸,在分散數據的情況下,會造成任務執行的成本提高,獲得結果的周期變長,而數據共享模式可以讓多種框架共享數據和硬件資源,大幅度減少數據分散帶來的成本。

有效降低運維和管理成本。相比較一種計算框架需要一批維護人員,而運維人員較多又會帶來的管理成本的上升;共享模式只需要少數的運維人員和管理人員即可完成多個框架的統一運維管理,便于運維優化和運維管理策略統一執行。

總之,Spark憑借其良好的伸縮性、快速的在線處理速度、具有Hadoop基因等一系列優勢,迅速成為大數據處理領域的佼佼者。Apache Spark已經成為整合以下大數據應用的標準平臺:

□交互式查詢,包括SQL;

□實時流處理;

□復雜的分析,包括機器學習、圖計算;

□批處理。

1.1.3 Spark的特點

作為新一代輕量級大數據快速處理平臺,Spark具有以下特點:

快速。Spark有先進的DAG執行引擎,支持循環數據流和內存計算;Spark程序在內存中的運行速度是Hadoop MapReduce運行速度的100倍,在磁盤上的運行速度是Hadoop MapReduce運行速度的10倍,如圖1-2所示。

圖1-2 Hadoop MapReduce和Spark在內存中的運行速度比較

易用。Spark支持使用Java、Scala、Python語言快速編寫應用,提供超過80個高級運算符,使得編寫并行應用程序變得容易。

通用。Spark可以與SQL、Streaming以及復雜的分析良好結合。基于Spark,有一系列高級工具,包括Spark SQL、MLlib(機器學習庫)、GraphX和Spark Streaming,支持在一個應用中同時使用這些架構,如圖1-3所示。

圖1-3 Spark高級工具架構

有效集成Hadoop。Spark可以指定Hadoop,YARN的版本來編譯出合適的發行版本,Spark也能夠很容易地運行在EC2、Mesos上,或以Standalone模式運行,并從HDFS、HBase、Cassandra和其他Hadoop數據源讀取數據。

1.1.4 Spark應用場景

Spark使用了內存分布式數據集,除了能夠提供交互式查詢外,還優化了迭代工作負載,在Spark SQL、Spark Streaming、MLlib、GraphX都有自己的子項目。在互聯網領域,Spark在快速查詢、實時日志采集處理、業務推薦、定制廣告、用戶圖計算等方面都有相應的應用。國內的一些大公司,比如阿里巴巴、騰訊、Intel、網易、科大訊飛、百分點科技等都有實際業務運行在Spark平臺上。下面簡要說明Spark在各個領域中的用途。

□快速查詢系統,基于日志數據的快速查詢系統業務構建于Spark之上,利用其快速查詢以及內存表等優勢,能夠承擔大部分日志數據的即時查詢工作;在性能方面,普遍比Hive快2~10倍,如果使用內存表的功能,性能將會比Hive快百倍。

□實時日志采集處理,通過Spark Streaming實時進行業務日志采集,快速迭代處理,并進行綜合分析,能夠滿足線上系統分析要求。

□業務推薦系統,使用Spark將業務推薦系統的小時和天級別的模型訓練轉變為分鐘級別的模型訓練,有效優化相關排名、個性化推薦以及熱點點擊分析等。

□定制廣告系統,在定制廣告業務方面需要大數據做應用分析、效果分析、定向優化等,借助Spark快速迭代的優勢,實現了在“數據實時采集、算法實時訓練、系統實時預測”的全流程實時并行高維算法,支持上億的請求量處理;模擬廣告投放計算效率高、延遲小,同MapReduce相比延遲至少降低一個數量級。

□用戶圖計算。利用GraphX解決了許多生產問題,包括以下計算場景:基于度分布的中樞節點發現、基于最大連通圖的社區發現、基于三角形計數的關系衡量、基于隨機游走的用戶屬性傳播等。

主站蜘蛛池模板: 崇信县| 得荣县| 五大连池市| 铜梁县| 榆树市| 新宁县| 仲巴县| 邢台市| 融水| 尚志市| 呼图壁县| 友谊县| 长治县| 舒兰市| 平利县| 塘沽区| 南通市| 麻城市| 昭通市| 扎囊县| 松江区| 柯坪县| 色达县| 新乡县| 虹口区| 泾阳县| 镇江市| 花垣县| 漳平市| 旅游| 琼海市| 称多县| 通许县| 迁西县| 资中县| 铜山县| 张家界市| 邵东县| 山阳县| 卓尼县| 昌图县|