分布式离线计算—Spark—基础介绍
原文作者:饑渴的小蘋果
原文地址:【Spark】Spark基礎教程
目錄
Spark特點
Spark相對于Hadoop的優勢
Spark生態系統
Spark基本概念
Spark結構設計
Spark各種概念之間的關系
Executor的優點
Spark運行基本流程
Spark運行架構的特點
Spark的部署模式
Spark三種部署方式
Hadoop和Spark的統一部署
摘要:
Spark是基于內存計算的大數據并行計算框架
Spark使用DAG引擎,支持Scala、java、python等多種編程語言;集成了SQL查詢(Spark SQL)、流式計算(Spark Streaming)、機器學習(MLLib)、圖算法(GraphX4)等多種組件;
Spark包括Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX4種組件
Spark可以獨立部署也可以集成到hadoop中,由于Hadoop MapReduce、HBase、Storm和Spark等,都可以運行在資源管理框架YARN之上是最好的方式
Spark最初由美國加州伯克利大學的AMP實驗室于2009年開發,是基于內存計算的大數據并行計算框架,可用于構建大型的、低延遲的數據分析應用程序。
Spark特點
- 運行速度快:Spark使用先進的DAG(Directed Acyclic Graph,有向無環圖)執行引擎,以支持循環數據流與內存計算,基于內存的執行速度可比Hadoop MapReduce快上百倍,基于磁盤的執行速度也能快十倍;
- 容易使用:Spark支持使用Scala、Java、Python和R語言進行編程,簡潔的API設計有助于用戶輕松構建并行程序,并且可以通過Spark Shell進行交互式編程;
- 通用性:Spark提供了完整而強大的技術棧,包括SQL查詢、流式計算、機器學習和圖算法組件,這些組件可以無縫整合在同一個應用中,足以應對復雜的計算;
- 運行模式多樣:Spark可運行于獨立的集群模式中,或者運行于Hadoop中,也可運行于Amazon EC2等云環境中,并且可以訪問HDFS、Cassandra、HBase、Hive等多種數據源。
Spark相對于Hadoop的優勢
Hadoop雖然已成為大數據技術的事實標準,但其本身還存在諸多缺陷,最主要的缺陷是其MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用于離線批處理的應用場景。回顧Hadoop的工作流程,可以發現Hadoop存在如下一些缺點:
- 表達能力有限。計算都必須要轉化成Map和Reduce兩個操作,但這并不適合所有的情況,難以描述復雜的數據處理過程;
- 磁盤IO開銷大。每次執行時都需要從磁盤讀取數據,并且在計算完成后需要將中間結果寫入到磁盤中,IO開銷較大;
- 延遲高。一次計算可能需要分解成一系列按順序執行的MapReduce任務,任務之間的銜接由于涉及到IO開銷,會產生較高延遲。而且,在前一個任務執行完成之前,其他任務無法開始,難以勝任復雜、多階段的計算任務。
Spark主要具有如下優點:
- Spark的計算模式也屬于MapReduce,但不局限于Map和Reduce操作,還提供了多種數據集操作類型,編程模型比MapReduce更靈活;
- Spark提供了內存計算,中間結果直接放到內存中,帶來了更高的迭代運算效率;Spark最大的特點就是將計算數據、中間結果都存儲在內存中,大大減少了IO開銷
- Spark基于DAG的任務調度執行機制,要優于MapReduce的迭代執行機制。
- Spark提供了多種高層次、簡潔的API,通常情況下,對于實現相同功能的應用程序,Spark的代碼量要比Hadoop少2-5倍。
但Spark并不能完全替代Hadoop,主要用于替代Hadoop中的MapReduce計算模型。實際上,Spark已經很好地融入了Hadoop生態圈,并成為其中的重要一員,它可以借助于YARN實現資源調度管理,借助于HDFS實現分布式存儲。
Spark生態系統
Spark的生態系統主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX?等組件,各個組件的具體功能如下:
- 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套接字等;
- MLlib(機器學習):MLlib提供了常用機器學習算法的實現,包括聚類、分類、回歸、協同過濾等,降低了機器學習的門檻,開發人員只要具備一定的理論知識就能進行機器學習的工作;
- GraphX(圖計算):GraphX是Spark中用于圖計算的API,可認為是Pregel在Spark上的重寫及優化,Graphx性能良好,擁有豐富的功能和運算符,能在海量數據上自如地運行復雜的圖算法。
Spark基本概念
在具體講解Spark運行架構之前,需要先了解幾個重要的概念:
- RDD:是彈性分布式數據集(Resilient Distributed Dataset)的簡稱,是分布式內存的一個抽象概念,提供了一種高度受限的共享內存模型;
- DAG:是Directed Acyclic Graph(有向無環圖)的簡稱,反映RDD之間的依賴關系;
- Executor:是運行在工作節點(Worker Node)上的一個進程,負責運行任務,并為應用程序存儲數據;
- 應用:用戶編寫的Spark應用程序;
- 任務:運行在Executor上的工作單元;
- 作業:一個作業包含多個RDD及作用于相應RDD上的各種操作;
- 階段:是作業的基本調度單位,一個作業會分為多組任務,每組任務被稱為“階段”,或者也被稱為“任務集”。
Spark結構設計
Spark運行架構包括集群資源管理器(Cluster Manager)、運行作業任務的工作節點(Worker Node)、每個應用的任務控制節點(Driver)和每個工作節點上負責具體任務的執行進程(Executor)。其中,集群資源管理器可以是Spark自帶的資源管理器,也可以是YARN或Mesos等資源管理框架。
Spark各種概念之間的關系
在Spark中,一個應用(Application)由一個任務控制節點(Driver)和若干個作業(Job)構成,一個作業由多個階段(Stage)構成,一個階段由多個任務(Task)組成。當執行一個應用時,任務控制節點會向集群管理器(Cluster Manager)申請資源,啟動Executor,并向Executor發送應用程序代碼和文件,然后在Executor上執行任務,運行結束后,執行結果會返回給任務控制節點,或者寫到HDFS或者其他數據庫中
Executor的優點
與Hadoop MapReduce計算框架相比,Spark所采用的Executor有兩個優點:
Spark運行基本流程
Spark運行架構的特點
Spark的部署模式
Spark支持的三種典型集群部署方式,即standalone、Spark on Mesos和Spark on YARN;然后,介紹在企業中是如何具體部署和應用Spark框架的,在企業實際應用環境中,針對不同的應用場景,可以采用不同的部署應用方式,或者采用Spark完全替代原有的Hadoop架構,或者采用Spark和Hadoop一起部署的方式。
Spark三種部署方式
Spark應用程序在集群上部署運行時,可以由不同的組件為其提供資源管理調度服務(資源包括CPU、內存等)。比如,可以使用自帶的獨立集群管理器(standalone),或者使用YARN,也可以使用Mesos。因此,Spark包括三種不同類型的集群部署方式,包括standalone、Spark on Mesos和Spark on YARN。
1.standalone模式
與MapReduce1.0框架類似,Spark框架本身也自帶了完整的資源調度管理服務,可以獨立部署到一個集群中,而不需要依賴其他系統來為其提供資源管理調度服務。在架構的設計上,Spark與MapReduce1.0完全一致,都是由一個Master和若干個Slave構成,并且以槽(slot)作為資源分配單位。不同的是,Spark中的槽不再像MapReduce1.0那樣分為Map 槽和Reduce槽,而是只設計了統一的一種槽提供給各種任務來使用。
2.Spark on Mesos模式
Mesos是一種資源調度管理框架,可以為運行在它上面的Spark提供服務。Spark on Mesos模式中,Spark程序所需要的各種資源,都由Mesos負責調度。由于Mesos和Spark存在一定的血緣關系,因此,Spark這個框架在進行設計開發的時候,就充分考慮到了對Mesos的充分支持,因此,相對而言,Spark運行在Mesos上,要比運行在YARN上更加靈活、自然。目前,Spark官方推薦采用這種模式,所以,許多公司在實際應用中也采用該模式。
3. Spark on YARN模式
Spark可運行于YARN之上,與Hadoop進行統一部署,即“Spark on YARN”,其架構如圖9-13所示,資源管理和調度依賴YARN,分布式存儲則依賴HDFS
Hadoop和Spark的統一部署
一方面,由于Hadoop生態系統中的一些組件所實現的功能,目前還是無法由Spark取代的,比如,Storm可以實現毫秒級響應的流計算,但是,Spark則無法做到毫秒級響應。另一方面,企業中已經有許多現有的應用,都是基于現有的Hadoop組件開發的,完全轉移到Spark上需要一定的成本。因此,在許多企業實際應用中,Hadoop和Spark的統一部署是一種比較現實合理的選擇。
由于Hadoop MapReduce、HBase、Storm和Spark等,都可以運行在資源管理框架YARN之上,因此,可以在YARN之上進行統一部署(如圖9-16所示)。這些不同的計算框架統一運行在YARN中,可以帶來如下好處:
- ?計算資源按需伸縮;
- 不用負載應用混搭,集群利用率高;
-
共享底層存儲,避免數據跨集群遷移
總結
以上是生活随笔為你收集整理的分布式离线计算—Spark—基础介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySql—锁机制原理
- 下一篇: 分布式实时计算—Spark—Spark