Spark基礎架構

Spark模塊設計

整個Spark主要有以下模塊組成

  • Spark Core:Spark的核心功能實現,包括:SparkContext的初始化、部署模式、存儲體系、任務提交和執行、計算引擎等。
  • Spark Sql:提供SQL處理能力,便於熟悉關係型數據庫操作的工程師進行交互查詢。此外,還為熟悉Hadoop的用戶提供Hive SQL處理能力。
  • Spark Streaming:提供流式計算處理能力,目前支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和簡單的TCP套接字等數據源。此外,還提供了窗口函數。
  • GraphX:提供圖計算處理能力,支持分佈式,Pregel提供的API可以解決圖計算中的常見問題。
  • MLlib:提供機器學習相關的統計、分類、迴歸等領域的多種算法實現。其一致性的API接口大大降低了用戶的學習成本。

Spark Sql、Spark Streaming、GraphX、MLlib的能力都是建立在核心引擎之上的。

Spark Core

Spark Cord提供Spark最基礎與最核心的功能,主要包括一下功能:

  • SparkContext:SparkContext隱藏了網絡通信、分佈式部署、消息通信、存儲能力、計算能力、緩存、測量系統、文件服務、Web服務等內容,應用程序開發者只需要使用SparkContext提供的API完成功能開發。SparkContext內置的DAGScheduler負責創建Job,將DAG中的RDD劃分到不同的Stage,提交Stage等功能。內置的TaskScheduler負責資源的申請、任務的提交及請求集群對任務的調度工作。
  • 存儲體系:Spark優先考慮使用各節點的內存作為存儲,當內存不足時才會考慮使用磁盤,極大的減少了磁盤I/O,提高了任務執行的效率,使得Spark適用於實時計算、流式計算等場景。此外,Spark還提供了以內存為中心的高容錯的分佈式文件系統Tachyon供用戶選擇。Tachyon能夠為Spark提供可靠的內存級的文件共享服務。
  • 計算引擎:計算引擎有SparkContext中的DAGScheduler、RDD以及具體節點上的Executor負責執行的Map和Reduce任務組成。DAGScheduler和RDD雖然位於SparkContext內部,但是在任務正式提價與執行之前會將Job中的RDD組織成有向無環圖(DAG),並對Stage進行劃分,決定了任務執行階段任務的數量、迭代計算、shuffle等過程。
  • 部署模式:Spark在SparkContext的TaskScheduler組件中提供了對Standalone部署模式的實現和Yarn、Mesos等分佈式資源管理系統的支持。通過使用Standalone、Yarn、Mesos等部署模式為Task分配計算資源,提高任務的併發執行效率。

Spark擴展功能

  • Spark SQL:Spark SQL的過程可以總結為:首先使用SQL語句解析器(sqlParser)將SQL轉換為語法樹(Tree),並且使用規則執行器(RuleExecutor)將一系列規則(Rule)應用於語法樹,最終生成物理執行計算並執行。其中規則執行器包括語法分析器(Analyzer)和優化器(Optimizer)。
  • Spark Streaming:Spark Streaming支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和簡單的TCP套接字等多種數據輸入源。輸入流接收器(Receiver)負責接入數據,是接入數據流的接口規範。Dstream是Spark Streaming中所有數據流的抽象,Dstream可以被組織為DStreaming Graph。Dstream本質上有一系列連續的RDD組成。
  • GraphX:Spark提供的分佈式圖計算框架。GraphX主要遵循整體同步並行(bulk synchronous parallell, BSP)計算模式下的Pregel模型實現。GeaphX提供了對圖的抽象Graph,Graph有頂點(Vertex)、邊(Edge)以繼承了Edge的EdgeTripler三種結構組成。
  • MLlib:Spark提供的機器學習框架。MLlib目前提供了基礎統計、分類、迴歸、決策樹、隨機森林、樸素貝葉斯、保序迴歸、協同過濾、聚類、維度縮減、特徵提取與轉型、頻繁模型挖掘、預言模型標記語言、管道等多種數理統計、概率論、數據挖掘方面的數學算法。

Spark 基礎架構

從集群部署的角度來看,Spark集群有以下部分組成:

  • Cluster Manager:Spark的集群管理器,主要負責資源的分配和管理。集群管理器分配的資源屬於一級資源,將各個Worker上的內存、CPU等資源分配給應用程序,但是並不負責對Executor的資源分配。目前,Standalone、YARN、Mesis、EC2等都可以作為Spark的集群管理器。
  • Worker:Spark的工作節點。對Spark應用程序來說,有集群管理器分配得到資源的Worker節點負責以下工作:創建Executor,將資源和任務進一步部分配給Executor,同步資源信息給Cluster Manager。
  • Executor:執行計算任務的進程。主要負責任務的執行以及與Worker、Driver App的信息同步。
  • Driver App:客戶端驅動程序,也可以理解為客戶端應用程序,用於將任務程序轉換為RDD和DAG,並與Cluster Manager進行通信和調度。
Spark基礎架構


分享到:


相關文章: