一、優酷html
二、YouTubenode
Spark是加州大學伯克利分校AMP實驗室,開發的通用內存並行計算框架。Spark在2013年6月進入Apache成爲孵化項目,8個月後成爲Apache頂級項目Spark以其先進的設計理念,迅速成爲社區的熱門項目,圍繞着Spark推出了Spark SQL、Spark Streaming、MLLib和GraphX等組件,也就是BDAS(伯克利數據分析棧),這些組件逐漸造成大數據處理一站式解決平臺。web
Spark使用Scala語言實現,它是一種面向對象、函數式編程語言,可以像操做本地集合對象同樣輕鬆的操做分佈式數據集。算法
Spark擁有DAG執行引擎,支持在內存中對數據進行迭代計算。官方提供的數據代表,若是數據由磁盤讀取,速度是Hadoop MapReduce的10倍以上,若是數據從內存中讀取,速度能夠高達100多倍。編程
Spark不只支持Scala編寫應用程序,並且支持Java和Python等語言進行編寫,特別是Scala是一種高效、可拓展的語言,可以用簡潔的代碼處理較爲複雜的處理工做。多線程
Spark生態圈即BDAS(伯克利數據分析棧)包含了Spark Core、Spark SQL、SparkStreaming、MLLib和GraphX等組件,這些組件分別處理:Spark Core提供內存計算框架、SparkStreaming的實時處理應用、Spark SQL的即時查詢、MLlib的機器學習和GraphX的圖處理,它們都是由AMP實驗室提供,可以無縫的集成並提供一站式解決平臺。框架
四、隨處運行機器學習
Spark具備很強的適應性,可以讀取HDFS、Cassandra、HBase、S3爲持久層讀寫原生數據,可以以Mesos、YARN和自身攜帶的Standalone做爲資源管理器調度job,來完成Spark應用程序的計算。異步
一、Spark的中間數據放到內存中,對於迭代運算效率更高編程語言
二、Spark比Hadoop更通用
三、Spark提供了統一的編程接口
四、容錯性– 在分佈式數據集計算時經過checkpoint來實現容錯
五、可用性– Spark經過提供豐富的Scala, Java,Python API及交互式Shell來提升可用性
一、目前大數據處理場景
1. 複雜的批量處理(Batch Data Processing),偏重點在於處理海量數據的能力,至於處理速度可忍受,一般的時間多是在數十分鐘到數小時;
2. 基於歷史數據的交互式查詢(Interactive Query),一般的時間在數十秒到數十分鐘之間
3. 基於實時數據流的數據處理(Streaming Data Processing),一般在數百毫秒到數秒之間
1————————Hadoop的MapReduce來進行海量數據的批處理
2————————Impala進行交互式查詢
3————————Storm分佈式處理框架處理實時流式數據
一、Spark是基於內存的迭代計算框架,適用於須要屢次操做特定數據集的應用場合。須要反覆操做的次數越多,所需讀取的數據量越大,受益越大,數據量小可是計算密集度較大的場合,受益就相對較小。
二、因爲RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。
三、數據量不是特別大,可是要求實時統計分析需求。
廣點通是最先使用Spark的應用之一。騰訊大數據精準推薦藉助Spark快速迭代的優點,圍繞「數據+算法+系統」這套技術方案,實現了在「數據實時採集、算法實時訓練、系統實時預測」的全流程實時並行高維算法,最終成功應用於廣點通投放系統上,支持天天上百億的請求量。
Yahoo將Spark用在Audience Expansion中的應用。Audience Expansion是廣告中尋找目標用戶的一種方法:首先廣告者提供一些觀看了廣告而且購買產品的樣本客戶,據此進行
學習,尋找更多可能轉化的用戶,對他們定向廣告。Yahoo採用的算法是logistic regression。目前在Yahoo部署的Spark集羣有112臺節點,9.2TB內存。
阿里搜索和廣告業務,最初使用Mahout或者本身寫的MR來解決複雜的機器學習,致使效率低並且代碼不易維護。淘寶技術團隊使用了Spark來解決屢次迭代的機器學習算法、高計算複雜度的算法等。將Spark運用於淘寶的推薦相關算法上,同時還利用Graphx解決了許多生產問題,包括:基於度分佈的中樞節點發現、基於最大連通圖的社區發現、基於三角形計數的關係衡量、基於隨機遊走的用戶屬性傳播等。
Local |
本地模式 |
用於本地開發測試,本地還分爲local單線程和local-cluster多線程。 |
On yarn |
集羣模式 |
運行在yarn框架之上,由yarn負責資源管理,Spark負責任務調度和計算。 |
Standalone |
集羣模式 |
典型的Mater-slave模式,Spark自帶的模式。 |
Spark Application的概念和Hadoop MapReduce相似,指的是用戶編寫的Spark應用程序,包含了一個Driver 功能的代碼和分佈在集羣中多個節點上運行的Executor代碼。
Spark中的Driver即運行上述Application的main()函數而且建立SparkContext,其中建立SparkContext的目的是爲了準備Spark應用程序的運行環境。在Spark中由SparkContext負責和ClusterManager通訊,進行資源的申請、任務的分配和監控等;當Executor部分運行完畢後,Driver負責將SparkContext關閉。一般用SparkContext表明Drive。
Application運行在Worker 節點上的一個進程,該進程負責運行Task,而且負責將數據存在內存或者磁盤上,每一個Application都有各自獨立的一批Executor。在Spark on Yarn模式下,其進程名稱爲CoarseGrainedExecutorBackend,相似於Hadoop MapReduce中的YarnChild。一個CoarseGrainedExecutorBackend進程有且僅有一個executor對象,它負責將Task包裝成taskRunner,並從線程池中抽取出一個空閒線程運行Task。每一個CoarseGrainedExecutorBackend能並行運行Task的數量就取決於分配給它的CPU的個數了。
指的是在集羣上獲取資源的外部服務,目前有:Standalone、Mesos、Yarn
集羣中任何能夠運行Application代碼的節點,相似於YARN中的NodeManager節點。在Standalone模式中指的就是經過Slave文件配置的Worker節點,在Spark on Yarn模式中指的就是NodeManager節點。
包含多個Task組成的並行計算,每每由Spark Action催生,一個JOB包含多個RDD及做用於相應RDD上的各類Operation。
每一個Job會被拆分不少組Task,每組任務被稱爲Stage,也可稱TaskSet,一個做業分爲多個階段。
被送到某個Executor上的工做任務。
是Resilient distributed datasets的簡稱,中文爲彈性分佈式數據集;是Spark最核心的模塊和類。
根據Job構建基於Stage的DAG,並提交Stage給TaskScheduler。
將Taskset提交給Worker node集羣運行並返回結果。
是Spark API的一種類型,Transformation返回值仍是一個RDD, 全部的Transformation採用的都是懶策略,若是隻是將Transformation提交是不會執行計算的。
是Spark API的一種類型,Action返回值不是一個RDD,而是一個scala集合;計算只有在Action被提交的時候計算才被觸發。