1. 程式人生 > >Spark基礎到高階 第一課 spark概述

Spark基礎到高階 第一課 spark概述

一 Spark介紹-spark的基本架構及相關原理

1.1 spark簡介

spark是一個實現快速通用的叢集計算平臺。它是由加州大學伯克利分校AMP實驗室 開發的通用記憶體平行計算框架,用來構建大型的、低延遲的資料分析應用程式。它擴充套件了廣泛使用的MapReduce計算

模型。高效的支撐更多計算模式,包括互動式查詢和流處理。spark的一個主要特點是能夠在記憶體中進行計算,依賴磁碟進行復雜的運算,Spark依然比MapReduce更加高效。

1.2 Spark的架構

Spark組成(BDAS):全稱伯克利資料分析棧,通過大規模整合演算法、機器、人之間展現大資料應用的一個平臺。也是處理大資料、雲端計算、通訊的技術解決方案。

它的主要元件如圖所示:

Spark Core:

包含Spark的基本功能;尤其是定義RDD的API、操作以及這兩者上的動作。其他Spark的庫都是構建在RDD和Spark Core之上的 Spark SQL:

提供通過Apache Hive的SQL變體Hive查詢語言(HiveQL)與Spark進行互動的API。每個資料庫表被當做一個RDD,Spark SQL查詢被轉換為Spark操作。 Spark Streaming:

對實時資料流進行處理和控制。Spark Streaming允許程式能夠像普通RDD一樣處理實時資料 MLlib:

一個常用機器學習演算法庫,演算法被實現為對RDD的Spark操作。這個庫包含可擴充套件的學習演算法,比如分類、迴歸等需要對大量資料集進行迭代的操作。 GraphX:

控制圖、並行圖操作和計算的一組演算法和工具的集合。GraphX擴充套件了RDD API,包含控制圖、建立子圖、訪問路徑上所有頂點的操作

1.3  spark的組成架構

spark遵循簡單的主從架構,這裡為大家做1個簡單的描述

  • Cluster Manager:
  • 在standalone模式中即為Master主節點,控制整個叢集,監控worker。在YARN模式中為資源管理器
  • Worker節點:
  • 從節點,負責控制計算節點,啟動Executor或者Driver。
  • Driver: 執行Application 的main()函式
  • Executor:執行器,是為某個Application執行在worker node上的一個程序

1.4Spark和hadoop生態圈

首先我們需要明確一點,spark並不是取代hadoop,只是替代了hadoop的計算引擎

Spark只是替代hadoop的一部分,也就是hadoop的相關計算引擎,mr,hive查詢引擎

Spark本身不提供大資料的儲存!

1.5  Spark和hive的關係

spark 可以直接從hive中查詢資料.

結構上Hive On Spark和SparkSQL都是一個翻譯層,spark是把一個SQL翻譯成分散式可執行的Spark程式

hive是把sql翻譯為mr

1.5.1  Hive on Mapreduce和SparkSQL使用場景

Hive on Mapreduce場景 Hive的出現可以讓那些精通SQL技能、但是不熟悉MapReduce 、程式設計能力較弱與不擅長Java語言的使用者能夠在HDFS大規模資料集上很方便地利用SQL 語言查詢、彙總、分析資料,畢竟精通SQL語言的人要比精通Java語言的多得多 Hive適合處理離線非實時資料 SparkSQL場景 Spark既可以執行本地local模式,也可以以Standalone、cluster等多種模式執行在Yarn、Mesos上,還可以執行在雲端例如EC2。此外,Spark的資料來源非常廣泛,可以處理來自HDFS、HBase、 Hive、Cassandra、Tachyon上的各種型別的資料。 實時性要求或者速度要求較高的場所  

1.5.2 Hive on Mapreduce和SparkSQL效能對比

大家可以參考過往記憶的部落格:

結論:sparksql和hive on spark時間差不多,但都比hive on mapreduce快很多,官方資料認為spark會被傳統mapreduce快10-100倍

1.6  Spark提升

1.6.1 常見術語介紹

  • Application:
  •  Appliction都是指使用者編寫的Spark應用程式,其中包括一個Driver功能的程式碼和分佈在叢集中多個節點上執行的Executor程式碼
  • Driver:  
  • Spark中的Driver即執行上述Application的main函式並建立SparkContext,建立SparkContext的目的是為了準備Spark應用程式的執行環境,在Spark中有SparkContext負責與ClusterManager通訊,進行資源申請、任務的分配和監控等,當Executor部分執行完畢後,Driver同時負責將SparkContext關閉,通常用SparkContext代表Driver
  • Executor: 
  •  某個Application執行在worker節點上的一個程序,  該程序負責執行某些Task, 並且負責將資料存到記憶體或磁碟上,每個Application都有各自獨立的一批Executor, 在Spark on Yarn模式下,其程序名稱為CoarseGrainedExecutor Backend。一個CoarseGrainedExecutor Backend有且僅有一個Executor物件, 負責將Task包裝成taskRunner,並從執行緒池中抽取一個空閒執行緒執行Task, 這個每一個oarseGrainedExecutor Backend能並行執行Task的數量取決與分配給它的cpu個數
  • Cluter Manager:
  • 指的是在叢集上獲取資源的外部服務。目前有三種類型
    1. Standalon : spark原生的資源管理,由Master負責資源的分配
    2. Apache Mesos:與hadoop MR相容性良好的一種資源排程框架
    3. Hadoop Yarn: 主要是指Yarn中的ResourceManager
  • Worker: 叢集中任何可以執行Application程式碼的節點,在Standalone模式中指的是通過slave檔案配置的Worker節點,在Spark on Yarn模式下就是NoteManager節點
  • Task: 被送到某個Executor上的工作單元,但hadoopMR中的MapTask和ReduceTask概念一樣,是執行Application的基本單位,多個Task組成一個Stage,而Task的排程和管理等是由TaskScheduler負責
  • Job: 包含多個Task組成的平行計算,往往由Spark Action觸發生成, 一個Application中往往會產生多個Job
  • Stage: 每個Job會被拆分成多組Task, 作為一個TaskSet, 其名稱為Stage,Stage的劃分和排程是有DAGScheduler來負責的,Stage有非最終的Stage(Shuffle Map Stage)和最終的Stage(Result Stage)兩種,Stage的邊界就是發生shuffle的地方
  • DAGScheduler: 根據Job構建基於Stage的DAG(Directed Acyclic Graph有向無環圖),並提交Stage給TASkScheduler。 其劃分Stage的依據是RDD之間的依賴的關係找出開銷最小的排程方法,如下圖
  • TASKSedulter: 
  • 將TaskSET提交給worker執行,每個Executor執行什麼Task就是在此處分配的. TaskScheduler維護所有TaskSet,當Executor向Driver發生心跳時,TaskScheduler會根據資源剩餘情況分配相應的Task。另外TaskScheduler還維護著所有Task的執行標籤,重試失敗的Task。下圖展示了TaskScheduler的作用
  • 在不同執行模式中任務排程器具體為:
    1. Spark on Standalone模式為TaskScheduler
    2. YARN-Client模式為YarnClientClusterScheduler
    3. YARN-Cluster模式為YarnClusterScheduler
  • 將這些術語串起來的執行層次圖如下:
  • Job=多個stage,Stage=多個同種task, Task分為ShuffleMapTask和ResultTask,Dependency分為ShuffleDependency和NarrowDependency

1.6.2  Spark的執行模式

  • Spark的執行模式多種多樣,靈活多變,部署在單機上時,既可以用本地模式執行,也可以用偽分佈模式執行,而當以分散式叢集的方式部署時,也有眾多的執行模式可供選擇,這取決於叢集的實際情況,底層的資源排程即可以依賴外部資源排程框架,也可以使用Spark內建的Standalone模式。

具體來說:

對於外部資源排程框架的支援,目前的實現包括相對穩定的Mesos模式,以及hadoop YARN模式 本地模式:常用於本地開發測試,本地還分別 local 和 local cluster standalone: 獨立叢集執行模式

 Mesos:Spark可以執行在Mesos裡面(Mesos 類似於yarn的一個資源排程框架)

standalone:Spark自己可以給自己分配資源(master,worker)

YARN:Spark可以執行在yarn上面