Apache Spark基礎及架構
- 為什麼使用Spark
-
- MapReduce程式設計模型的局限性
-
- 繁雜
- 處理效率低:
- 不适合疊代處理、互動式處理和流式處理
- Spark是類Hadoop MapReduce的通用并行架構
- Spark簡介
-
- 發展曆程
- Spark優勢
-
- 速度快
- 易用性
- 通用性
- 随處運作
- Spark技術棧
-
- Spark Core
- Spark SQL
- Spark Streaming
- Spark GraphX
- Spark MLlib
- Spark環境部署
- Spark初體驗
-
- spark-shell:Spark自帶的互動式工具
- Spark架構設計
-
- 運作架構
- Spark架構核心元件
- Spark API
為什麼使用Spark
MapReduce程式設計模型的局限性
繁雜
隻有Map和Reduce兩個操作,複雜的邏輯需要大量的樣闆代碼
處理效率低:
Map中間結果寫磁盤,Reduce寫HDFS,多個Map通過HDFS交換資料
任務排程與啟動開銷大
不适合疊代處理、互動式處理和流式處理
Spark是類Hadoop MapReduce的通用并行架構
Job中間輸出結果可以儲存在記憶體,不再需要讀寫HDFS
比MapReduce平均快10倍以上
Spark簡介
誕生于加州大學伯克利分校AMP實驗室,是一個基于記憶體的分布式計算架構
發展曆程
2009年誕生于加州大學伯克利分校AMP實驗室
2010年正式開源
2013年6月正式成為Apache孵化項目
2014年2月成為Apache頂級項目
2014年5月正式釋出Spark 1.0版本
2014年10月Spark打破MapReduce保持的排序記錄
2015年釋出了1.3、1.4、1.5版本
2016年釋出了1.6、2.x版本
Spark優勢
速度快
基于記憶體資料處理,比MR快100個數量級以上(邏輯回歸算法測試)
基于硬碟資料處理,比MR快10個數量級以上
易用性
支援Java、Scala、Python、R語言
互動式shell友善開發測試
通用性
一棧式解決方案:批處理、互動式查詢、實時流處理、圖計算及機器學習
随處運作
YARN、Mesos、EC2、Kubernetes、Standalone、Local
Spark技術棧
Spark Core
核心元件,分布式計算引擎
Spark SQL
高性能的基于Hadoop的SQL解決方案
Spark Streaming
可以實作高吞吐量、具備容錯機制的準實時流處理系統
Spark GraphX
分布式圖處理架構
Spark MLlib
建構在Spark上的分布式機器學習庫
Spark環境部署
參考部落格連結:Spark2.4.5、Scala2.11高可用環境搭建(有安裝包連結)
Spark初體驗
spark-shell:Spark自帶的互動式工具
本機
Standalone
YARN
spark-shell --master yarn-client
scala>sc.textFile("hdfs://cluster1/data/hello.txt")
.flatMap(x=>x.split("\t"))
.map(x=>(x,1)).reduceByKey(_+_).collect
#hello.txt内容
hello world welcome
hello welcome
Spark架構設計
運作架構
1.在驅動程式中,通過SparkContext主導應用的執行
2.SparkContext可以連接配接不同類型的Cluster Manager(Standalone、YARN、Mesos),連接配接後,獲得叢集節點上的Executor
3.一個Worker節點預設一個Executor,可通過SPARK_WORKER_INSTANCES調整
4.每個應用擷取自己的Executor
5.每個Task處理一個RDD分區

Spark架構核心元件
Spark API
參考部落格連結:Maven工程實作Spark api—wordcount和列印hdfs檔案