第一章 Spark系統概述
目錄
- 大數據處理框架
- Spark大數據處理框架
- RDD表達能力
- Spark子系統
注:學習《Spark大數據處理技術》筆記
1. 大數據處理框架
1. 集羣環境對於編程的挑戰
- 並行化
- 對單節點失敗的處理
- 資源分配問題
2. 由此產生了大數據編程框架
- MapReduce
- 是什麼?一個簡單通用和自動容錯的批處理計算模型
- 缺點:交互式和流處理,MapReduce並不適合
- 所以出現了很多不同於MapReduce的專有的數據處理模型
- 但這些專有系統模型也有一些不足
- 重複工作
許多專有系統在解決同樣的問題,比如分佈式作業以及容錯,這些問題在每個專有系統中會被重複被解決 - 組合問題
在不同的系統之間進行組合計算是一件費力不討好的事情 - 適用範圍的侷限性
如果一個應用不適合一個專有的計算系統,那麼只能換一個系統,或者重新寫一個計算系統 - 資源分配
在不同的計算引擎之間進行資源的動態共享是比較困難的 - 管理問題
對於多個專有系統,需要花費更多的精力和時間來管理和部署
- 重複工作
2. Spark大數據處理框架
1. Spark的由來
- 針對MapReduce及各種專有系統出現的不足,提出了統一大數據處理框架Spark,創新性提出RDD概念(彈性數據集)
- 目的:是爲了實現MapReduce不擅長的計算工作(迭代式、交互式和流式)
- 特性:在並行計算的各個階段進行有效的數據共享,這種共享就是RDD本質
2. RDD的表達能力
- 使用RDD可以實現很多現有的集羣編程模型以及一些以前的模型不支持的新應用
- RDD還提供了高級特性:提供包括容錯處理、滯後節點處理等這些專有系統缺乏的特性
- 四種模型
- 迭代算法
可以用於圖處理和機器學習 - 關係型查詢
MapReduce由於容錯模型導致速度很慢,RDD通過實現很多通用的數據庫引擎特性,可以獲得非常好的性能 - MapReduce批處理
RDD提供的接口是MapReduce的超集,所以RDD可以有效運行利用MapReduce實現的應用程序 - 流式處理
D-Stream(離散數據流)將流式計算當做一系列的短小而確定的批處理操作,將兩個離散流之間的狀態保存在RDD中。離散型模型能夠運行通過RDD的繼承關係圖進行並行性的恢復而不需要進行數據拷貝
- 迭代算法
3. Spark子系統
- 大數據處理場景
- 複雜的批量數據處理
十分鐘到半小時 - 基於歷史數據的交互式查詢
十秒到數分鐘 - 基於實時數據流的數據處理
數百毫秒到數秒
- 複雜的批量數據處理
- 由於RDD具有豐富的表達能力,所以在Spark Core的基礎上衍生出能夠同時處理三種情形的統一大數據處理平臺
- Spark Core
基於RDD提供了豐富的操作接口,利用DAG進行統一的任務規劃,使得Spark能夠更加靈活處理類似MapReduce的批處理作業 - Shark/Spark SQL
兼容Hive的接口HQL,提供了比Hive高出10~100倍的查詢速度的分佈式SQL引擎 - Spark Stream
將流式計算分解成一系列短小的批處理作業,利用Spark輕量級和低延時的調度框架,可以很好的支持流式處理 - GraphX
基於Spark的圖計算框架,兼容Pregel和GraphLab接口,增強了圖構建以及圖轉換功能 - MLlib
Spark Core天然地非常適合迭代式計算,MLlib就是構建在Spark上的機器學習算法庫。
- Spark Core
- Spark最終目標是將批處理、交互式處理、流式處理融合到同一個軟件棧中
-
Spark生態系統兼容Hadoop生態系統
-
Spark生態系統學習成本很低
要實現一個相對完整的端到端解決方案,以前需要部署維護多個專有系統,現在只需要一個Spark系統 -
Spark性能表現優異
由於Spark利用DAG進行調度執行規劃,所以在多任務計算以及迭代計算中能夠大量減少磁盤I/O的時間。另外,對於每一項任務啓動一個線程,而不是進程,大大縮短了任務啓動時間 -
Spark有強大的社區支持
-
Spark支持多種語言編程接口
Spark生態本身使用Scala語言編寫的,但考慮到其流行性,因此Spark從一開始就支持Java和Python接口。
-