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??偠灾琒park的partition在概念上與hadoop中的split是相似的,提供了一種劃分數據的方式。

附錄:

RDD的一大特點就是有依賴關系存儲在每一個RDD里面,當某一個RDD計算的時候發現parent RDD的數據丟失了,那它就會從parent的parent RDD重新計算一遍以恢復出parent數據,如果一直沒找到,那么就會找到根RDD,有可能是HadoopRDD,那么就會從HDFS上讀出數據一步步恢復出來。當然如果完全找不到數據,那么就恢復不出來了。這稱之為RDD的lineage信息。(被稱為血統or依賴關系)

數據本地性是指:確定數據在哪個節點上,就到哪個節點上的Executor上去運行。學習的過程中,大家交流一下遇到的問題可以讓你事半功倍,這里有個大數據交流學習群:724693112 群主會分享免費學習資料,大家可以一起來交流學習大數據相關技術,分享學習方法學習資源,一起學習大數據!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容