--------“道路是曲折的邻梆,前途時光明的然爆。”
一. Spark 是什么
分布式計算框架搔涝,核心是一個對由許多計算任務(wù)組成的厨喂、運(yùn)行在多個工作機(jī)器或者是一個計算集群上的應(yīng)用進(jìn)行調(diào)度、分發(fā)以及監(jiān)控的計算引擎庄呈。
Spark核心引擎的特點(diǎn)——速度快蜕煌、通用
大一統(tǒng)的軟件棧,其組件——Spark Core诬留、Spark SQL(結(jié)構(gòu)化數(shù)據(jù))斜纪、Spark Streaming(實(shí)時計算)贫母、MLib(機(jī)器學(xué)習(xí))、GraphX(圖計算)
設(shè)計原理——組件之間密切結(jié)合盒刚,好處:1)均可從底層優(yōu)化改進(jìn)中獲益腺劣; 2)運(yùn)行整個軟件棧的代價減少因块;¢僭3)構(gòu)建無縫整合不同處理模型的應(yīng)用
二. Spark 特點(diǎn):
- 分布式:多臺機(jī)器并行化
- 基于內(nèi)存存儲(某些情況下也會基于磁盤,比如內(nèi)存中放不下的時候)
- 特別適合于迭代計算
- 高效的容錯機(jī)制
三. 各組件
1 Spark Core
1)實(shí)現(xiàn)Spark的基本功能涡上,包括任務(wù)調(diào)度趾断、內(nèi)存管理、錯誤恢復(fù)吓懈、與存儲系統(tǒng)交互等模塊歼冰。
2)包括對彈性分布式數(shù)據(jù)集(RDD)的API定義(RDD表示分布在多個計算節(jié)點(diǎn)上可以并行操作的元素集合,是Spark主要的編程抽象)耻警,Spark Core提供了創(chuàng)建和操作這些集合的多個API隔嫡。
2 Spark SQL
Spark SQL是Spark用來操作結(jié)構(gòu)化數(shù)據(jù)的程序包,可使用SQL或者HQL來查詢數(shù)據(jù)甘穿。
1)擴(kuò)展了Spark的RDD API
3 Spark Streaming
Spark提供的對實(shí)時數(shù)據(jù)進(jìn)行流式計算的組件腮恩。
1)提供了用來操作數(shù)據(jù)流的API,并且與Spark Core中的RDD API高度對應(yīng)温兼。
2)從底層來看秸滴,Spark Streaming支持Spark Core同級別的容錯性、吞吐量以及可伸縮性
4 MLib
提供機(jī)器學(xué)習(xí)功能的程序庫
1)提供了很多種機(jī)器學(xué)習(xí)算法募判,包括分類荡含、回歸、聚類届垫、協(xié)同過濾等
2)提供了模型評估释液、數(shù)據(jù)導(dǎo)入等額外的支持功能
3)還提供了一種更底層的機(jī)器學(xué)習(xí)原語,包括一個通用的速度下降優(yōu)化算法
所有這些算法都被設(shè)計為可以在集群上輕松伸縮的架構(gòu)装处。
5 Graphx
用來操作圖(比如社交網(wǎng)絡(luò)的)的程序庫误债,可以進(jìn)行并行的圖計算。
1)擴(kuò)展了Spark的RDD API妄迁,能用來創(chuàng)建一個定點(diǎn)和邊都包含任意屬性的有向圖
2)支持針對圖的各種操作
3)支持一些常用的圖算法
6 集群管理器
就底層而言寝蹈,Spark設(shè)計為可以高效地在一個計算節(jié)點(diǎn)到數(shù)千個計算節(jié)點(diǎn)之間伸縮計算。
為了實(shí)現(xiàn)這樣的要求登淘,同時獲得最大靈活性箫老,Spark支持在各種集群管理器上運(yùn)行,包括Hadoop YARN形帮、Apache Mesos槽惫,以及Spark 自帶的一個簡易調(diào)度器周叮,叫做獨(dú)立調(diào)度器。
若在裝有Hadoop YARN或Mesos的集群界斜,通過Spark對這些集群管理器的支持仿耽,我們的應(yīng)用也同樣能運(yùn)行在這些集群上。在把Spark部署到Amazon EC2上時各薇,Spark有個自帶的腳本可以啟動獨(dú)立模式集群以及各種相關(guān)服務(wù)项贺。
不同集群管理的區(qū)別
1)自帶的獨(dú)立模式:在一堆機(jī)器上只運(yùn)行Spark
2)Hadoop YARN或Mesos集群管理器:既可以運(yùn)行Spark作業(yè)有可以運(yùn)行hadoop作業(yè)
四. 彈性分布式數(shù)據(jù)集(RDD)
RDD——是一個不可變的、容錯的峭判、分布式對象集合开缎,可并行操作這些集合并且RDD提供了豐富的數(shù)據(jù)操作接口。
RDD是對分布式計算的抽象林螃,數(shù)據(jù)集本身表示要處理的數(shù)據(jù)奕删,它是一系列數(shù)據(jù)分片,分布在各個節(jié)點(diǎn)的內(nèi)存或者磁盤中疗认。
彈性之一:自動進(jìn)行內(nèi)存和磁盤數(shù)據(jù)存儲的切換
彈性之二:基于lineage的高效容錯(若第900個出錯完残,直接從第900個開始恢復(fù)就可以)
彈性之三:Task如果失敗會自動進(jìn)行特定次數(shù)的重試,默認(rèn)嘗試4次
彈性之四:Stage如果失敗會自動進(jìn)行特定次數(shù)的重試(横漏!注意谨设!只計算失敗的分片)。默認(rèn)是嘗試3次
五. Spark的存儲層次
Spark不僅可以將任何Hadoop分布式文件系統(tǒng)(HDFS)上的文件讀取為分布式數(shù)據(jù)集缎浇,也可以支持其他支持Hadoop接口的系統(tǒng)扎拣,比如本地文件、亞馬遜S3素跺、Cassandra二蓝、Hive、HBase等指厌。我們需要弄清楚——hadoop并非Spark的必要條件侣夷,Spark支持任何實(shí)現(xiàn)了hadoop接口的存儲系統(tǒng)。Spark支持的hadoop輸入格式包括文本文件仑乌、SequenceFile、Avro琴锭、Parquet等晰甚。
Know more,do more