Spark 介紹以及相關概念
Spark起源:
Apache Spark 是專為大規模資料處理而設計的快速通用的計算引擎。Spark是UC Berkeley 加州大學伯克利AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的MapReduce的演算法。
Spark特點:
- 大資料分散式計算框架,記憶體計算
- 分散式計算
- 記憶體計算 中間結果在記憶體 迭代
- 容錯性
- 多計算正規化
Spark生態系統
Mesos:資源管理框架,相當於hadoop 中的yarn。進行資源管理和任務排程
HDFS:spark生態系統不提供儲存層,呼叫外部儲存系統例如HDFS
Tachyon:生態系統中的分散式記憶體檔案系統,快速的檔案讀寫
將工作集檔案快取在記憶體中,從而避免到磁碟中載入需要經常讀取的資料集。通過這一機制,不同的作業/查詢和框架可以以記憶體級的速度訪問快取的檔案。
(資源管理和檔案管理屬於不同的 模組)
Spark:生態系統中的核心計算引擎
Spark Streaming:流式計算引擎,將輸入資料分成小的批次,對每個批次採用spark的計算正規化進行計算
四大核心擴充套件功能:
Spark SQL:Sql on hadoop系統,提供互動式查詢、能夠利用傳統的視覺化工具
在Spark上進行類似SQL的查詢操作,報表查詢等功能
GraphX:圖計算引擎,大規模圖運算,pagerank
MLlib:聚類分類 分類 推薦 等機器學習演算法
Spark相關概念
學習Spark,有幾個重要的術語需要弄清楚。
1. Application
使用者在spark上構建的程式,包含了driver程式以及叢集上的executors(driver以及不同的executors可能在不同的物理機上).
2. Driver Program
執行main函式並且建立SparkContext的程式(關於dirver到底是什麼在後面的部落格有介紹)。客戶端的應用程式,Driver Program類似於hadoop的wordcount程式的main函式。
3. Cluster Manager
叢集的資源管理器,在叢集上獲取資源的外部服務。spark自帶的有資源管理器,在standalone模式下使用,也可以依賴於外部的資源管理器,比如Mesos,yarn
拿Yarn舉例,客戶端程式會向資源管理器比如Yarn申請計算我這個任務需要多少的記憶體,多少CPU,然後Cluster Manager告訴driver可哪些資源以使用,然後driver就可以把程式送到每個Worker Node上面去執行了。
4. Worker Node
叢集中任何一個可以執行spark應用程式碼的節點(既物理節點,比如叢集中的一臺電腦),可以在上面啟動Executor程序。
5. Executor
在每個WorkerNode上為某應用啟動的一個程序,該程序負責執行任務,並且負責將資料存在記憶體或者磁碟上,每個任務都有各自獨立的Executor。
Executor是一個執行Task的容器。它的主要職責是:
- 初始化程式要執行的上下文SparkEnv,解決應用程式需要執行時的jar包的依賴,載入類。
- 同時還有一個ExecutorBackend向cluster manager彙報當前的任務狀態,這一方面有點類似hadoop的tasktracker和task。
總結:Executor是一個應用程式執行的監控和執行容器。
6.Job
包含很多task的平行計算,可以認為是Spark RDD 裡面的action,每個action的計算會生成一個job。使用者提交的Job會提交給DAGScheduler,Job會被分解成Stage和Task。
7. Stage
一個Job會被拆分為多組Task,每組任務被稱為一個Stage就像Map Stage, Reduce Stage。
Stage的劃分在RDD的文章中有詳細的介紹,簡單的說是以shuffle和result這兩種型別來劃分。在Spark中有兩類task,一類是shuffleMapTask,一類是resultTask,第一類task的輸出是shuffle所需資料,第二類task的輸出是result,stage的劃分也以此為依據,shuffle之前的所有變換是一個stage,shuffle之後的操作是另一個stage。stage的邊界就是產生shuffle的地方
8.Task
被送到executor上的工作單元。
Spark上分為2類task。
1.shuffleMapTask:對不同的partition進行重組,形成款依賴關係,shuffleMapTask是不同stage的中間過渡
2.resultTask:一個job中最後一個task,這個task的結果提交到下一個job中
9.Partition
Partition類似hadoop的Split,計算是以partition為單位進行的,當然partition的劃分依據有很多,這是可以自己定義的,像HDFS檔案,劃分的方式就和MapReduce一樣,以檔案的block來劃分不同的partition。總而言之,Spark的partition在概念上與hadoop中的split是相似的,提供了一種劃分資料的方式。
附錄:
RDD的一大特點就是有依賴關係儲存在每一個RDD裡面,當某一個RDD計算的時候發現parent RDD的資料丟失了,那它就會從parent的parent RDD重新計算一遍以恢復出parent資料,如果一直沒找到,那麼就會找到根RDD,有可能是HadoopRDD,那麼就會從HDFS上讀出資料一步步恢復出來。當然如果完全找不到資料,那麼就恢復不出來了。這稱之為RDD的lineage資訊。(被稱為血統or依賴關係)
資料本地性是指:確定資料在哪個節點上,就到哪個節點上的Executor上去執行