Apache Spark
Apache Spark是一個開源的分布式通用計算框架,具有(大部分)內(nèi)存數(shù)據(jù)處理引擎,可以對大量的數(shù)據(jù)靜態(tài)或者動態(tài)地進行ETL,分析,機器學習和圖形處理,并為各種編程語言提供豐富簡潔的高級APIs: Scala, Python, Java, R 以及SQL。

你可以將Spark看做一個分布式的數(shù)據(jù)處理引擎,用于批量和流式模式,包括SQL查詢,圖形處理和機器學習。
和Hadoop基于磁盤的兩階段MapReduce計算引擎相比,Spark的多階段內(nèi)存計算引擎運行在內(nèi)存中運行大部分計算,因此在大多數(shù)情況下能為某些應用程序提供更好的性能,例如迭代算法和交互式數(shù)據(jù)挖掘。
Spark也經(jīng)常被稱作集群計算引擎,或者簡單地稱作執(zhí)行引擎。
Spark可用于執(zhí)行復雜的多階段應用程序,如機器學習算法和交互式即席查詢。Spark為內(nèi)存集群計算提供了一個高效的數(shù)據(jù)抽象,稱作彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset, RDD)
Spark主要用Scala編寫,但它為開發(fā)者提供其他語言的API,如Java, Python和R。
如果你需要在低延遲的條件下處理大量的數(shù)據(jù)(傳統(tǒng)的MR程序無法滿足),那么Spark是一個可行的選擇。
- 從任何數(shù)據(jù)源訪問任何數(shù)據(jù)類型
- 巨大的存儲和數(shù)據(jù)處理需求
Spark可以以本地集群的形式,在本機或者云端運行。它運行在Hadoop YARN, Apache Mesos, 獨立部署模式或者云端部署(Amazon EC2或IBM Bluemix)之上。
在高層次上,Spark應用程序利用輸入數(shù)據(jù)來創(chuàng)建RDDs, 將它們通過延遲轉(zhuǎn)換函數(shù)(lazy transformations)轉(zhuǎn)換為其他形式,最后執(zhí)行操作(Actions)來收集或者存儲數(shù)據(jù),不難吧?
程序員使用指定語言的API以及轉(zhuǎn)換和操作在RDD上工作,數(shù)據(jù)工程師使用更高級別的數(shù)據(jù)抽象如DataFrame,Pipelines APIs或者外部工具(連接到Spark)來工作,最后由管理員調(diào)節(jié)集群參數(shù)以部署Spark應用程序。
Spark的目標以更快的計算速度,更易于使用,更好的擴展性以及交互式分析等,成為一個通用的計算平臺,讓各種專門的應用程序框架運行在其之上。
為什么用Spark
- 易于上手
- 可用于多種類型的工作
- 利用最好的分布式批量數(shù)據(jù)處理(Hadoop)
- RDD - 分布式并行Scala數(shù)據(jù)集合
- 豐富的標準庫
- 統(tǒng)一的開發(fā)和部署環(huán)境
- 交互式探索/探索性分析(Spark-Shell)
- 又稱為即席查詢(Ad-hoc queris)
- 數(shù)據(jù)集成工具,支持豐富的數(shù)據(jù)源
- 底層優(yōu)化
- Spark's lazy evaluation gives plenty of opportunities to include low-level optimizations (so users have to know less to do more)
- 適用于低延遲交互式工作(low latency)
- ETL實現(xiàn)更簡單
- 統(tǒng)一簡潔的高層次API
- 近乎零磁盤使用以獲得更好的性能
- 容錯