Spark起源:
Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎。Spark是UC Berkeley 加州大學(xué)伯克利AMP lab (加州大學(xué)伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用并行框架,Spark,擁有Hadoop MapReduce所具有的優(yōu)點;但不同于MapReduce的是Job中間輸出結(jié)果可以保存在內(nèi)存中,從而不再需要讀寫HDFS,因此Spark能更好地適用于數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)等需要迭代的MapReduce的算法。
Spark特點:
大數(shù)據(jù)分布式計算框架,內(nèi)存計算
分布式計算
內(nèi)存計算 中間結(jié)果在內(nèi)存 迭代
容錯性
多計算范式
Spark生態(tài)系統(tǒng)
Mesos:資源管理框架,相當(dāng)于hadoop 中的yarn。進(jìn)行資源管理和任務(wù)調(diào)度?
HDFS:spark生態(tài)系統(tǒng)不提供存儲層,調(diào)用外部存儲系統(tǒng)例如HDFS?
Tachyon:生態(tài)系統(tǒng)中的分布式內(nèi)存文件系統(tǒng),快速的文件讀寫?
將工作集文件緩存在內(nèi)存中,從而避免到磁盤中加載需要經(jīng)常讀取的數(shù)據(jù)集。通過這一機(jī)制,不同的作業(yè)/查詢和框架可以以內(nèi)存級的速度訪問緩存的文件。?
(資源管理和文件管理屬于不同的 模塊)?
Spark:生態(tài)系統(tǒng)中的核心計算引擎?
Spark Streaming:流式計算引擎,將輸入數(shù)據(jù)分成小的批次,對每個批次采用spark的計算范式進(jìn)行計算?
四大核心擴(kuò)展功能:?
Spark SQL:Sql on hadoop系統(tǒng),提供交互式查詢、能夠利用傳統(tǒng)的可視化工具?
在Spark上進(jìn)行類似SQL的查詢操作,報表查詢等功能?
GraphX:圖計算引擎,大規(guī)模圖運算,pagerank?
MLlib:聚類分類 分類 推薦 等機(jī)器學(xué)習(xí)算法
Spark相關(guān)概念
學(xué)習(xí)Spark,有幾個重要的術(shù)語需要弄清楚。
1. Application
用戶在spark上構(gòu)建的程序,包含了driver程序以及集群上的executors(driver以及不同的executors可能在不同的物理機(jī)上).
2. Driver Program
運行main函數(shù)并且創(chuàng)建SparkContext的程序(關(guān)于dirver到底是什么在后面的博客有介紹)??蛻舳说膽?yīng)用程序,Driver Program類似于hadoop的wordcount程序的main函數(shù)。
3. Cluster Manager
集群的資源管理器,在集群上獲取資源的外部服務(wù)。spark自帶的有資源管理器,在standalone模式下使用,也可以依賴于外部的資源管理器,比如Mesos,yarn?
拿Yarn舉例,客戶端程序會向資源管理器比如Yarn申請計算我這個任務(wù)需要多少的內(nèi)存,多少CPU,然后Cluster Manager告訴driver可哪些資源以使用,然后driver就可以把程序送到每個Worker Node上面去執(zhí)行了。
4. Worker Node
集群中任何一個可以運行spark應(yīng)用代碼的節(jié)點(既物理節(jié)點,比如集群中的一臺電腦),可以在上面啟動Executor進(jìn)程。
5. Executor
在每個WorkerNode上為某應(yīng)用啟動的一個進(jìn)程,該進(jìn)程負(fù)責(zé)運行任務(wù),并且負(fù)責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上,每個任務(wù)都有各自獨立的Executor。?
Executor是一個執(zhí)行Task的容器。它的主要職責(zé)是:
初始化程序要執(zhí)行的上下文SparkEnv,解決應(yīng)用程序需要運行時的jar包的依賴,加載類。
同時還有一個ExecutorBackend向cluster manager匯報當(dāng)前的任務(wù)狀態(tài),這一方面有點類似hadoop的tasktracker和task。?
總結(jié):Executor是一個應(yīng)用程序運行的監(jiān)控和執(zhí)行容器。
6.Job
包含很多task的并行計算,可以認(rèn)為是Spark RDD 里面的action,每個action的計算會生成一個job。用戶提交的Job會提交給DAGScheduler,Job會被分解成Stage和Task。
7. Stage
一個Job會被拆分為多組Task,每組任務(wù)被稱為一個Stage就像Map Stage, Reduce Stage。?
Stage的劃分在RDD的文章中有詳細(xì)的介紹,簡單的說是以shuffle和result這兩種類型來劃分。在Spark中有兩類task,一類是shuffleMapTask,一類是resultTask,第一類task的輸出是shuffle所需數(shù)據(jù),第二類task的輸出是result,stage的劃分也以此為依據(jù),shuffle之前的所有變換是一個stage,shuffle之后的操作是另一個stage。stage的邊界就是產(chǎn)生shuffle的地方
8.Task
被送到executor上的工作單元。?
Spark上分為2類task。?
1.shuffleMapTask:對不同的partition進(jìn)行重組,形成款依賴關(guān)系,shuffleMapTask是不同stage的中間過渡
2.resultTask:一個job中最后一個task,這個task的結(jié)果提交到下一個job中
9.Partition
Partition類似hadoop的Split,計算是以partition為單位進(jìn)行的,當(dāng)然partition的劃分依據(jù)有很多,這是可以自己定義的,像HDFS文件,劃分的方式就和MapReduce一樣,以文件的block來劃分不同的partition。總而言之,Spark的partition在概念上與hadoop中的split是相似的,提供了一種劃分?jǐn)?shù)據(jù)的方式。
附錄:
RDD的一大特點就是有依賴關(guān)系存儲在每一個RDD里面,當(dāng)某一個RDD計算的時候發(fā)現(xiàn)parent RDD的數(shù)據(jù)丟失了,那它就會從parent的parent RDD重新計算一遍以恢復(fù)出parent數(shù)據(jù),如果一直沒找到,那么就會找到根RDD,有可能是HadoopRDD,那么就會從HDFS上讀出數(shù)據(jù)一步步恢復(fù)出來。當(dāng)然如果完全找不到數(shù)據(jù),那么就恢復(fù)不出來了。這稱之為RDD的lineage信息。(被稱為血統(tǒng)or依賴關(guān)系)
數(shù)據(jù)本地性是指:確定數(shù)據(jù)在哪個節(jié)點上,就到哪個節(jié)點上的Executor上去運行。學(xué)習(xí)的過程中,大家交流一下遇到的問題可以讓你事半功倍,這里有個大數(shù)據(jù)交流學(xué)習(xí)群:724693112 群主會分享免費學(xué)習(xí)資料,大家可以一起來交流學(xué)習(xí)大數(shù)據(jù)相關(guān)技術(shù),分享學(xué)習(xí)方法學(xué)習(xí)資源,一起學(xué)習(xí)大數(shù)據(jù)!