1. Spark 簡介
Spark是一個用來實現(xiàn)快速而通用的集群計算的平臺。
Spark 不僅可以將任何Hadoop 分布式文件系統(tǒng)(HDFS)上的文件讀取為分布式數(shù)據(jù)集,也可以支持其他支持Hadoop 接口的系統(tǒng),比如本地文件、亞馬遜S3、Cassandra、Hive、HBase 等。

1.1 Spark Core
Spark Core 實現(xiàn)了Spark 的基本功能:
1.任務調(diào)度
2.內(nèi)存管理
3.錯誤恢復
4.與存儲系統(tǒng)交互等模塊
Spark Core 中還包含了對彈性分布式數(shù)據(jù)集(resilient distributed dataset,簡稱RDD)的API 定義。RDD 表示分布在多個計算節(jié)點上可以并行操作的元素集合,是Spark 主要的編程抽象。Spark Core 提供了創(chuàng)建和操作這些集合的多個API。
1.2 Spark SQL
Spark SQL 是Spark用來操作結(jié)構(gòu)化數(shù)據(jù)的程序包。
- 通過Spark SQL,我們可以使用SQL或者Apache Hive 版本的SQL 方言(HQL)來查詢數(shù)據(jù)。
2.Spark SQL 支持多種數(shù)據(jù)源,比如Hive 表、Parquet 以及JSON 等。
3.除了為Spark 提供了一個SQL 接口,Spark SQL 還支持開發(fā)者將SQL和傳統(tǒng)的RDD 編程的數(shù)據(jù)操作方式相結(jié)合,不論是使用Python、Java 還是Scala,開發(fā)者都可以在單個的應用中同時使用SQL 和復雜的數(shù)據(jù)分析。
1.3 Spark Streaming
Spark Streaming 是Spark 提供的對實時數(shù)據(jù)進行流式計算的組件。
數(shù)據(jù)流:比如生產(chǎn)環(huán)境中的網(wǎng)頁服務器日志,或是網(wǎng)絡(luò)服務中用戶提交的狀態(tài)更新組成的消息隊列,都是數(shù)據(jù)流。
Spark Streaming 提供了用來操作數(shù)據(jù)流的API,并且與Spark Core 中的RDD API 高度對應。這樣一來,程序員編寫應用時的學習門檻就得以降低,不論是操作內(nèi)存或硬盤中的數(shù)據(jù),還是操作實時數(shù)據(jù)流,程序員都更能應對自如。從底層設(shè)計來看,Spark Streaming 支持與Spark Core 同級別的容錯性、吞吐量以及可伸縮性。
1.5 Spark MLlib
Spark 中還包含一個提供常見的機器學習(ML)功能的程序庫,叫作MLlib。
MLlib 提供了很多種機器學習算法,包括分類、回歸、聚類、協(xié)同過濾等,還提供了模型評估、數(shù)據(jù)導入等額外的支持功能。MLlib 還提供了一些更底層的機器學習原語,包括一個通用的梯度下降優(yōu)化算法。所有這些方法都被設(shè)計為可以在集群上輕松伸縮的架構(gòu)。
1.6 GraphX
GraphX 是用來操作圖(比如社交網(wǎng)絡(luò)的朋友關(guān)系圖)的程序庫,可以進行并行的圖計算。
與Spark Streaming 和Spark SQL 類似,GraphX 也擴展了Spark 的RDD API,能用來創(chuàng)建一個頂點和邊都包含任意屬性的有向圖。GraphX 還支持針對圖的各種操作(比如進行圖分割的subgraph 和操作所有頂點的mapVertices),以及一些常用圖算法(比如PageRank和三角計數(shù))。
1.7 集群管理器
就底層而言,Spark 設(shè)計為可以高效地在一個計算節(jié)點到數(shù)千個計算節(jié)點之間伸縮計算。為了實現(xiàn)這樣的要求,同時獲得最大靈活性,Spark 支持在各種集群管理器(cluster manager)上運行,包括Hadoop YARN、Apache Mesos,以及Spark 自帶的一個簡易調(diào)度器,叫作獨立調(diào)度器(Standalone)。
1.8 Spark Shell啟動
如果你有一個Hadoop 集群, 并且Hadoop 版本支持YARN, 通過為Spark master 設(shè)定
yarn-client 參數(shù)值,就可以在集群上啟動Spark 作業(yè):
$ spark-shell --master yarn-client
$ spark-shell --master yarn --deploy-mode client
如果你是在自己的計算機上運行示例,可以通過設(shè)定local[N] 參數(shù)來啟動本地Spark 集
群,其中N 代表運行的線程數(shù),或者用* 表示使用機器上所有可用的核數(shù)。比如,要在一
個8 核的機器上用8 個線程啟動一個本地集群,可以輸入以下命令:
$ spark-shell --master local[*]