目錄
1 spark 概述
1.1 Spark產生的背景
基於mapreduce的一些缺點,列如只有map和reduce兩種操作,延遲高、編寫程序複雜、中間結果多次落地到磁盤,等原因,spark繼承mapreduce並且對其進行了改良的形成一種新的計算框架。它的優點是使用內存計算,計算快,生態圈完善。包括spark sql spark core spark streaming 機器學習 圖計算等。spark 相對於mapreduce會的招式多,除了map reduce以外。有兩大類型的算子,分爲action 算子 和轉換類型的算子。action算子典型的有count、reduceBykey、cllocet等。轉換算子典型的有map、key、value 、filter等。spark streaming 可以實現準實時計算。spark是有scala有的,代碼量相對於java少很多。
1.2 什麼是Spark
Spark,是一種通用的大數據計算框架,正如傳統大數據技術Hadoop的MapReduce、Hive引擎,以及Storm流式實時計算引擎等。
Spark是加州大學伯克利分校AMP實驗室(Algorithms, Machines, and People Lab)開發的通用內存並行計算框架,用於構建大型的、低延遲的數據分析應用程序。
Spark使用強大的Scala語言開發,它還提供了對Scala、Python、Java(支持Java 8)和R語言的支持。
Apache頂級項目,項目主頁:http://spark.apache.org
1.3 Spark歷史
2009年由Berkeley's AMPLab開始編寫最初的源代碼
2010年開放源代碼
2013年6月進入Apache孵化器項目
2014年2月成爲Apache的頂級項目(8個月時間)
2014年5月底Spark1.0.0發佈,打破Hadoop保持的基準排序紀錄
2014年12月Spark1.2.0發佈
2015年11月Spark1.5.2發佈
2016年1月Spark1.6發佈
2016年12月Spark2.1發佈
1.4 爲什麼要用Spark
運行速度快:
使用DAG(全稱 Directed Acyclic Graph, 中文爲:有向無環圖)執行引擎以支持循環數據流與內存計算(當然也有部分計算基於磁盤,比如shuffle);
易用性好:
支持使用Scala、Java、Python和R語言進行編程,可以通過Spark Shell進行交互式編程 ;
通用性強:
Spark提供了完整而強大的工具,包括SQL查詢、流式計算、機器學習和圖算法組件;
隨處運行:
可運行於獨立的集羣模式中,可運行於Hadoop中,也可運行於Amazon EC2等雲環境中,並且可以訪問HDFS、Cassandra、HBase、Hive等多種數據源;
1.5 Spark 對比 Hadoop
Hadoop:
可以用普通硬件搭建Hadoop集羣,用於解決存儲和計算問題;
1)解決存儲:HDFS
2)解決計算:MapReduce
3)資源管理:YARN
Spark:
Spark是在借鑑了MapReduce之上發展而來的,繼承了其分佈式並行計算的優點並改進了MapReduce明顯的缺陷;
Spark不能代替Hadoop,但可能代替MapReduce。
現狀:
Spark主要用於大數據的計算,而Hadoop以後主要用於大數據的存儲(HDFS),以及資源調度(Yarn)。Spark+Hadoop的組合,是未來大據領域最熱門的組合,也是最有前景的組合! 當然spark也有自己的集羣模式。
1.6 Spark 對比 MapReduce
1)spark可以把多次使用的數據放到內存中
2)spark 會的算法多,方便處理數據
3)spark大部分算子都沒有shuffle階段,不會頻繁落地磁盤,降低磁盤IO;同時這些算子可以不需要排序,省略排序的步驟。
4)在代碼編寫方面,不需要寫那麼複雜的MapReduce邏輯。
2 spark生態
spark core:
實現了spark的基本功能、包括任務調度、內存管理、錯誤恢復與存儲系統交互等模塊。spark core中還包含了對彈性分佈式數據集(resileent distributed dataset)的定義;
rdd 彈性分佈式數據集,是個抽象的概念,rdd是隻讀的,能通過rdd 的轉換算子產生rdd。
rdd可以理解爲是hdfs文件的數據。hdfs文件輸入分片爲2,相當於spark rdd 有兩個分區。每個rdd的分區操作,其實就是對對應hdfs文件數據的操作。
spark sql:
是spark用來操作結構化數據的程序,通過SPARK SQL,我們可以使用SQL或者HIVE(HQL)來查詢數據,支持多種數據源,比如HIVE表就是JSON等,除了提供SQL查詢接口,還支持將SQL和傳統的RDD結合,開發者可以在一個應用中同時使用SQL和編程的方式(API)進行數據的查詢分析,SPARK SQL是在1.0中被引入的;
Spark Streaming:
是Spark提供的對實時數據進行流式計算的組件,比如網頁服務器日誌,或者是消息隊列都是數據流。
MLLib:
是Spark中提供常見的機器學習功能的程序庫,包括很多機器學習算法,比如分類、迴歸、聚類、協同過濾等。
GraphX:
是用於圖計算的比如社交網絡的朋友關係圖。
3 Spark應用場景
Yahoo將Spark用在Audience Expansion中的應用,進行點擊預測和及時查詢等;
淘寶技術團隊使用了Spark來解決多次迭代的機器學習算法、高計算複雜度的算法等。應用於內容推薦、社區發現等;
騰訊大數據精準推薦藉助Spark快速迭代的優勢,實現了在“數據實時採集、算法實時訓練、系統實時預測”的全流程實時並行高維算法,最終成功應用於廣點通pCTR投放系統上;
優酷土豆將Spark應用於視頻推薦(圖計算)、廣告業務,主要實現機器學習、圖計算等迭代計算;
目前大數據在互聯網公司主要應用在廣告、報表、推薦系統等業務上。在廣告業務方面需要大數據做應用分析、效果分析、定向優化等,在推薦系統方面則需要大數據優化相關排名、個性化推薦以及熱點點擊分析等。這些應用場景的普遍特點是計算量大、效率要求高、時間性要求高的。
4 Spark環境部署
主要運行方式
Local : 單機
Standalone : spark集羣
On YARN:spark 運行在yarn,yarn做資源管理
On Mesos:Mesos 做資源管理