Spark學習筆記(一)——基礎概述


本篇筆記主要說一下Spark到底是個什么東西,了解一下它的基本組成部分,了解一下基本的概念,為之后的學習做鋪墊。過於細節的東西並不深究。在實際的操作過程中,才能夠更加深刻的理解其內涵。

1、什么是Spark?

Spark是由美國加州伯克利大學的AMP實驗室開發的,一款基於內存計算的大數據並行計算框架,可用於構建大型的、低延遲的數據分析應用程序。 說白了就是搞數據計算分析的框架,過於細節的東西在學習過程中再去體會,一口吃不成胖子,反而會噎死人。

2、Spark的內置模塊

來看一下Spark內置哪些模塊:

一個個來解釋一下,語言過於官方,挑一些能看懂的看,其他的,用着用着就懂了:

  • Spark Core:Spark Core包含Spark的基本功能,如內存計算、任務調度、部署模式故障恢復、存儲管理等。Spark建立在統一的抽象RDD之上,使其可以以基本一致的方式應對不同的大數據處理場景;通常所說的Apache Spark,就是指Spark Core;

  • Spark SQL: Spark SQL允許開發人員直接處理RDD,同時也可查詢Hive、HBase等外部數據源。Spark SQL的一個重要特點是其能夠統一處理關系表和RDD,使得開發人員可以輕松地使用SQL命令進行查詢,並進行更復雜的數據分析;

  • Spark Streaming: Spark Streaming支持高吞吐量、可容錯處理的實時流數據處理,其核心思路是將流式計算分解成一系列短小的批處理作業。Spark Streaming支持多種數據輸入源,如Kafka、Flume和TCP套接字等;

  • Spark MLlib:提供常見的機器學習(ML)功能的程序庫。包括分類、回歸、聚類、協同過濾等,還提供了模型評估、數據 導入等額外的支持功能。

  • 集群管理器:Spark 設計為可以高效地在一個計算節點到數千個計算節點之間伸縮計 算。為了實現這樣的要求,同時獲得最大靈活性,Spark支持在各種集群管理器(Cluster Manager)上運行,包括Hadoop YARN、Apache Mesos,以及Spark自帶的一個簡易調度器,叫作獨立調度器。 如果是Spark節點單獨使用一台機器的話,那么就用它的獨立調度器負責資源的調度;如果是混搭的集群,那么還是統一用Yarn比較合適,以防出現爭奪資源的情況。

3、Spark的特點

Hadoop雖然已成為大數據技術的事實標准,但其本身還存在諸多缺陷,最主要的缺陷是其MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用於離線批處理的應用場景。

回顧Hadoop的工作流程,可以發現Hadoop存在如下一些缺點:

  • 表達能力有限。計算都必須要轉化成Map和Reduce兩個操作,但這並不適合所有的情況,難以描述復雜的數據處理過程;
  • 磁盤I/O開銷大。MapReduce的計算是基於磁盤的,每次執行時都需要從磁盤讀取數據,並且在計算完成后需要將中間結果寫入到磁盤中,I/O開銷較大;
  • 延遲高。一次計算可能需要分解成一系列按順序執行的MapReduce任務,任務之間的銜接由於涉及到I/O開銷,會產生較高延遲。而且,在前一個任務執行完成之前,其他任務無法開始,難以勝任復雜、多階段的計算任務。

Spark主要具有如下優點:

  • Spark的計算模式也屬於MapReduce,但不局限於Map和Reduce操作,還提供了多種數據集操作類型,編程模型比MapReduce更靈活;

  • Spark提供了內存計算,中間結果直接放到內存中,帶來了更高的迭代運算效率;

  • Spark基於DAG的任務調度執行機制,要優於MapReduce的迭代執行機制。

Spark提供了多種高層次、簡潔的API,通常情況下,對於實現相同功能的應用程序,Spark的代碼量要比Hadoop很多。Spark最大的特點就是將計算數據、中間結果都存儲在內存中,大大減少了I/O開銷。

注意咯,Spark並不能完全替代Hadoop,主要用於替代Hadoop中的MapReduce計算模型。實際上,Spark已經很好地融入了Hadoop生態圈,並成為其中的重要一員,它可以借助於YARN實現資源調度管理,借助於HDFS實現分布式存儲。

4、Spark的重要角色

4.1 Master 和 Worker

搭建spark集群的時候我們就已經設置好了master節點和worker節點,一個集群有多個master節點和多個worker節點。

master節點常駐master守護進程,負責管理worker節點,我們從master節點提交應用。

worker節點常駐worker守護進程,與master節點通信,並且管理executor進程。

一台機器可以同時作為master和worker節點(舉個例子:你有三台機器,你可以選擇一台設置為master節點,然后剩下兩台設為worker節點,也可以把三台都設為worker節點,這種情況下,有一個機器既是master節點又是worker節點)

1)Master

它是Spark特有資源調度系統的Leader,掌管着整個集群的資源信息,類似於Yarn中的ResourceManager,它的主要功能是:

  • 監聽Worker是否正常工作;
  • Master對Worker、Application等的管理,具體包括接收Worker的注冊,並且管理所有 的Worker;接收client提交的Application,調度等待的Application並向Worker提交。

2)Worker

它是Spark特有資源調度系統的slave,有多個。每個salve掌管着各自所在節點的資源信息,類似於Yarn框架中的NodeManager,它的主要功能是:

  • 通過RegisterWorker注冊到Master;
  • 定時發送心跳信息給Master,告訴它 “我還活着”;
  • 根據Master發送的Application配置進程環境,並啟動ExcutorBackend(這是一個執行Task的臨時進程)

4.2 Driver 和 Executor

上面所說的master和worker,不論有沒有任務要被執行,這兩個角色始終都是存在的,下邊要說的driver和executor跟它倆不一樣了。沒必要一直起着,它們是伴隨着提交的任務來的。當我們寫好代碼,打成jar包,提交到集群上運行,才會出現這兩個東西。

1)Driver(驅動器)

Spark的驅動器是執行開發程序中的main方法的進程。它負責開發人員編寫的用來創建SparkContext、創建RDD,以及進行RDD的轉化操作和行動操作代碼的執行。如果驅動器程序終止,那么Spark應用也就結束了。相當於ApplicationMaster,當前任務的老大。它主要負責:

  • 把用戶程序轉為作業(JOB)

  • 跟蹤Executor的運行狀況

  • 為執行器節點調度任務

  • UI展示應用運行狀況

2)Executor(執行器)

Spark Executor是一個工作節點,負責在 Spark 作業中運行任務,任務間相互獨立。Spark 應用啟動時,Executor節點被同時啟動,並且始終伴隨着整個 Spark 應用的生命周期而存在。如果有Executor節點發生了故障或崩潰,Spark 應用也可以繼續執行,會將出錯節點上的任務調度到其他Executor節點上繼續運行。主要負責:

  • 負責運行組成 Spark 應用的任務,並將狀態信息返回給驅動器進程;

  • 通過自身的塊管理器(Block Manager)為用戶程序中要求緩存的RDD提供內存式存儲。RDD是直接緩存在Executor進程內的,因此任務可以在運行時充分利用緩存數據加速運算。這個先暫時不看,后邊學習了再說。

總結:Master和Worker是Spark的守護進程,也就是說Spark正常運行所必須的進程。Driver和Executor是臨時程序,當有具體任務提交到Spark集群的時候才會開啟的程序。


參考資料:

[1] 李海波. 大數據技術之Spark


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM