Spark 及其生態圈
背景
產生於加州大學伯克利分校AMP實驗室,2013年6月成為Apache成為孵化專案,Spark使用Scala語言進行實現,Scala 建立在JAVA之上
設計理念 :改善 MAP REDUCE 的弱點: 互動式和迭代式 ,在叢集多點記憶體中執行的分散式計算 ,容錯資料集合,DAG
為什麼用SPARK
先進的大資料分散式程式設計和計算框架
試圖替代HADOOP (SPARK 可以獨立於HADOOP)
記憶體分散式計算: 執行速度快
可以用 不同語言程式設計 (JAVA, SCALA, R and PYTHON)
可以從不同的資料來源取資料 (HDFS、Cassandra、HBase)
實現不同的大資料功能:Spark Core、Spark SQL、Spark Streaming,Spark MLIB 以及 GraphX
SPARK 的幾種執行模式
批處理 – 用於大規模的分散式資料處理 如:
spark-submit predict.py
spark-submit –class “SparkPi” target/scala-2.10/realtime-event_2.10-1.0.jar
流方式 – Spark流用於傳送和處理實時資料
互動方式:常用於處理在記憶體中的大塊資料.較低的延遲性 如:
spark-shell
pyspark
SPARK 的資料讀取和儲存
Spark可以從以下系統訪問資料
Hadoop HDFS 以及HIVE, HBASE 等生態圈部件
Amazon S3
Cassandra, Mongodb
其他流工具如 Flume, Kafka所支援的各協議如 AVRO
另外Spark可以支援一下檔案格式
Text (包括CSV JSON 等)
SequenceFiles
AVRO
Parquet
SPARK部件和應用平臺
Spark 的主要部
SPARK CORE:包含spark的主要基本功能。所有跟RDD有關的API都出自於SPARK CORE。
Spark SQL: Spark 中用於結構化資料處理的軟體包。使用者使用者可以在Spark環境下用 SQL語言處理資料。
Spark Streaming:Spark 中用來處理流資料的部件
MLlib:Spark 中用來進行機器學習和數學建模的軟體包
GraphX:Spark 中用來進行圖計算(如社交媒體關係) 的庫函式
Cluster Managers:Spark 中用來管理機群或節點的軟體平臺.這包括Hadoop YARN, Apache Mesos, 和 Standalone Scheduler (Spark 自帶的用於單機系統)
SPARK CORE
Spark生態圈的核心:
負責從HDFS、Amazon S3和HBase等持久層讀取資料
在、YARN和Standalone為資源管理器排程Job完成分散式 計算
包括兩個重要部件
有向無環圖(DAG)的分散式平行計算框架
容錯分散式資料RDD (Resilient Distributed Dataset)
總結SPARK CORE
SPARK CORE 就是 SPARK 功能排程中心,其中包括任務調動, 記憶體管理,容錯管理及儲存管理。同時也是一些列應用程式 的集中地。
這些應用程式用來定義和管理RDD (Resilient Distributed Dataset).
RDD代表了一系列資料集合分佈在機群的記憶體中。SPARK CORE 的任務是對這些資料進行分散式計算。
解釋RDD
彈性分散式資料集分佈在不同叢集節點的記憶體中
可以理解成一大陣列
陣列的每一元素是RDD的一分割槽
RDD的每一分割槽是一資料塊
一個RDD可以分佈並被運算在多臺計算機節點的記憶體及硬碟中
RDD資料塊可以放在磁碟上也可放在記憶體中(取決於設定)
如出現快取失效或丟失,RDD的分割槽可以重新計算重新整理
RDD本身是不能被修改的
但RDD可以通過API (底層採用Scala)被變換生成新的RDD
有兩類對RDD的操作:變換和操作
RDD 程式設計
SPARK RDD 的API實現了MapReduce的基本map函式和reduce函式 及計算模型,還提供更為豐富的函式如filter、join、groupByKey 等。另外SPARK SQL 可以用來操作有資料結構的RDD 即 SPARK DATA FRAME
解釋DAG
有向無環圖(DAG,Directed Acycle graph)的分散式平行計算框架
反應RDD之間的依賴關係
提供Cache機制來支援多次迭代計算或者資料共享以減少迭代計算 之間讀取資料局的開銷
根據使用者端對RDD的指令進行優化以減少系統開銷
SPARK和MAPREDUCE
SPARK RDD 的運算原理和MR是一樣的
但是它們的執行方式不同
MR的運算是記憶體磁碟互動讀寫.不能再記憶體中共享資料
MR弱點:replication, serialization和 disk IO
RDD可以被共享和持久化
大資料運算經常是互動式和迭代式的。所以資料的重用性很 重要。而MR的磁碟互動讀寫帶來I/O 開銷導致速度減慢