大數據高速計算引擎Spark

第一部分 Spark Core

第1節 Spark概述

1.1 什麼是Spark

Spark 是一個快速、通用的計算引擎。Spark的特點:
速度快。與 MapReduce 相比,Spark基於內存的運算要快100倍以上,基於硬
盤的運算也要快10倍以上。Spark實現了高效的DAG執行引擎,可以通過基於內
存來高效處理數據流;
使用簡單。Spark支持 Scala、Java、Python、R的API,還支持超過80種高級算
法,使用戶可以快速構建不同的應用。而且Spark支持交互式的Python和Scala
的shell,可以非常方便地在這些shell中使用Spark集羣來驗證解決問題的方法;
通用。Spark提供了統一的解決方案。Spark可以用於批處理、交互式查詢
(Spark SQL)、實時流處理(Spark Streaming)、機器學習(Spark MLlib)和圖計算
(GraphX)。這些不同類型的處理都可以在同一個應用中無縫使用。Spark統一的
解決方案非常具有吸引力,企業想用統一的平臺去處理遇到的問題,減少開發和
維護的人力成本和部署平臺的物力成本;
兼容好。Spark可以非常方便地與其他的開源產品進行融合。Spark可以使用
YARN、Mesos作爲它的資源管理和調度器;可以處理所有Hadoop支持的數
據,包括HDFS、HBase和Cassandra等。這對於已經部署Hadoop集羣的用戶特
別重要,因爲不需要做任何數據遷移就可以使用Spark的強大處理能力。Spark
也可以不依賴於第三方的資源管理和調度器,它實現了Standalone作爲其內置
的資源管理和調度框架,這樣進一步降低了Spark的使用門檻,使得所有人都可
以非常容易地部署和使用Spark。此外,Spark還提供了在EC2上部署
Standalone的Spark集羣的工具。

1.2 Spark 與 Hadoop

從狹義的角度上看:Hadoop是一個分佈式框架,由存儲、資源調度、計算三部分組 成; Spark是一個分佈式計算引擎,由 Scala 語言編寫的計算框架,基於內存的快速、通 用、可擴展的大數據分析引擎; 從廣義的角度上看,Spark是Hadoop生態中不可或缺的一部分;

MapReduce的不足:
	表達能力有限
	磁盤IO開銷大
	延遲高
		任務之間的銜接有IO開銷
		在前一個任務執行完成之前,後一個任務無法開始。難以勝任複雜的、多階段計算任務

Spark在借鑑MapReduce優點的同時,很好地解決了MapReduce所面臨的問題。

  • 備註:Spark的計算模式也屬於MapReduce;Spark框架是對MR框架的優化 ;

在實際應用中,大數據應用主要包括以下三種類型:

  • 批量處理(離線處理):通常時間跨度在數十分鐘到數小時之間
  • 交互式查詢:通常時間跨度在數十秒到數分鐘之間
  • 流處理(實時處理):通常時間跨度在數百毫秒到數秒之間

當同時存在以上三種場景時,傳統的Hadoop框架需要同時部署三種不同的軟件。 如:

  • MapReduce / Hive 或 Impala / Storm

這樣做難免會帶來一些問題:

  • 不同場景之間輸入輸出數據無法做到無縫共享,通常需要進行數據格式的轉換
  • 不同的軟件需要不同的開發和維護團隊,帶來了較高的使用成本
  • 比較難以對同一個集羣中的各個系統進行統一的資源協調和分配

Spark所提供的生態系統足以應對上述三種場景,即同時支持批處理、交互式查詢和 流數據處理:

  • Spark的設計遵循“一個軟件棧滿足不同應用場景”的理念(all in one),逐漸形成了一套完整的生態系統

  • 夠提供內存計算框架,也可以支持SQL即席查詢、實時流式計算、機器學習 和圖計算等

  • Spark 在資源管理器YARN之上,提供一站式的大數據解決方案

Spark 爲什麼比 MapReduce 快: 1 Spark積極使用內存。MR框架中一個Job 只能擁有一個 map task 和一個 reduce task。如果業務處理邏輯複雜,一個map和一個reduce是表達不出來的,這時就需 要將多個 job 組合起來;然而前一個job的計算結果必須寫到HDFS,才能交給後一個 job。這樣一個複雜的運算,在MR框架中會發生很多次寫入、讀取操作操作;Spark 框架則可以把多個map reduce task組合在一起連續執行,中間的計算結果不需要落 地; 複雜的MR任務:mr + mr + mr + mr +mr ... 複雜的Spark任務:mr -> mr -> mr ......

2、多進程模型(MR) vs 多線程模型(Spark)。MR框架中的的Map Task和Reduce Task是進程級別的,而Spark Task是基於線程模型的。MR框架中的 map task、 reduce task都是 jvm 進程,每次啓動都需要重新申請資源,消耗了不必要的時間。 Spark則是通過複用線程池中的線程來減少啓動、關閉task所需要的系統開銷。

1.3 系統架構

Spark運行架構包括:

  • Cluster Manager
  • Worker Node
  • Driver
  • Executor

Cluster Manager 是集羣資源的管理者。Spark支持3種集羣部署模式:

Standalone、Yarn、Mesos;

Worker Node 工作節點,管理本地資源;

Driver Program。運行應用的 main() 方法並且創建了 SparkContext。由Cluster Manager分配資源,SparkContext 發送 Task 到 Executor 上執行;

Executor:在工作節點上運行,執行 Driver 發送的 Task,並向 Dirver 彙報計算結果;

1.4 Spark集羣部署模式

Spark支持3種集羣部署模式:Standalone、Yarn、Mesos;

  • 1、Standalone模式 *獨立模式,自帶完整的服務,可單獨部署到一個集羣中,無需依賴任何其他資源管理系統。從一定程度上說,該模式是其他兩種的基礎

    Cluster Manager:Master

    Worker Node:Worker

    僅支持粗粒度的資源分配方式

  • 2、Spark On Yarn模式

Yarn擁有強大的社區支持,且逐步已經成爲大數據集羣資源管理系統的標準
在國內生產環境中運用最廣泛的部署模式
Spark on yarn 的支持兩種模式:
	yarn-cluster:適用於生產環境
	yarn-client:適用於交互、調試,希望立即看到app的輸出
Cluster Manager:ResourceManager
Worker Node:NodeManager
僅支持粗粒度的資源分配方式
  • 3、Spark On Mesos模式
	官方推薦的模式。Spark開發之初就考慮到支持Mesos
	Spark運行在Mesos上會比運行在YARN上更加靈活,更加自然
	Cluster Manager:Mesos Master
	Worker Node:Mesos Slave
	支持粗粒度、細粒度的資源分配方式

粗粒度模式(Coarse-grained Mode):每個應用程序的運行環境由一個Dirver和 若干個Executor組成,其中,每個Executor佔用若干資源,內部可運行多個Task。 應用程序的各個任務正式運行之前,需要將運行環境中的資源全部申請好,且運行過 程中要一直佔用這些資源,即使不用,最後程序運行結束後,回收這些資源。

細粒度模式(Fine-grained Mode):鑑於粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種調度模式:細粒度模式,這種模式類似於現在的雲計 算,核心思想是按需分配。

  • 三種集羣部署模式如何選擇: 生產環境中選擇Yarn,國內使用最廣的模式

    Spark的初學者:Standalone,簡單

    開發測試環境,可選擇Standalone

    數據量不太大、應用不是太複雜,建議可以從Standalone模式開始 mesos不會涉及到

1.5 相關術語

	Application 用戶提交的spark應用程序,由集羣中的一個driver 和 許多
	executor 組成
	Application jar 一個包含spark應用程序的jar,jar不應該包含 Spark 或 Hadoop
	的 jar,這些jar應該在運行時添加
	Driver program 運行應用程序的main(),並創建SparkContext(Spark應用程
	序)
	Cluster manager 管理集羣資源的服務,如standalone,Mesos,Yarn
	Deploy mode 區分 driver 進程在何處運行。在 Cluster 模式下,在集羣內部運
	行 Driver。 在 Client 模式下,Driver 在集羣外部運行
	Worker node 運行應用程序的工作節點
	Executor 運行應用程序 Task 和保存數據,每個應用程序都有自己的
	executors,並且各個executor相互獨立
	Task
	executors應用程序的最小運行單元
	Job
	在用戶程序中,每次調用Action函數都會產生一個新的job,也就是說每個
	Action 生成一個job
	Stage
	一個 job 被分解爲多個 stage,每個 stage 是一系列 Task 的集合

第2節 Spark安裝配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章