Spark——大數據技術棧的長子

題記

本想將上一系列‘數據倉庫’尚未分享的模塊——數據集市的在實際場景的概念模型和用處,基於數據倉庫上層的ETL工程設計分享出來,可是最近領導安排我,要給開發部的同事講解大數據的知識和技術,因此先放下數據倉庫的那些事兒,根據同事們的反饋,他們最想學的技術就是如今大數據技術棧裏面,數據計算處理的王者——Spark.
這篇分享從介紹Spark開始,算是入門前的入門,不涉及原理,不涉及技術,可是卻很重要,重要的是理解Spark是什麼?用來作什麼?爲何要選擇Spark?這將對之後工程師們在選擇和使用Spark的時候,更加能知道,應該怎樣的去用Spark,在什麼樣的場景下去使用什麼樣的Spark組件,來發揮它的價值。前端

what is spark?

Spark是一個通用數據處理引擎。
適用於各類環境 ,這裏介紹一下,主要應用於兩種最多見的場景python

離線場景:能夠是時間爲維度,幾年的數據集,或者是業務爲維度,某個領域的大數據集,這種數據能夠咱們通常叫作離線數據,或者冷數據。
實時場景:網站埋點,實時從前端頁面傳輸過來的數據,或者業務系統,物理硬件實時傳輸過來的數據,硬件信號或者圖像數據,咱們須要實時的去計算處理而且返回結果。
應用程序開發人員和數據科學家將Spark歸入其應用程序,以便快速查詢,分析和轉換數據。程序員

因此與Spark關聯最頻繁的任務包括跨大型數據集的交互式查詢,處理來自傳感器或金融系統的流數據以及機器學習任務。
Spark於2009年開始在加利福尼亞大學伯克利分校的AMPLab項目中生活。更具體地說,它是因爲須要證實Meso的概念而誕生的,這也是在AMPLab中建立的。算法

(科普:Mesos是Apache下的開源分佈式資源管理框架,它被稱爲是分佈式系統的內核。)

從一開始,Spark就被優化成在內存中運行。它比Hadoop的MapReduce等替代方法更快速地處理數據,這每每會在每一個處理階段之間向計算機硬盤驅動器寫入數據。Spark的支持者聲稱,Spark在內存中的運行速度比Hadoop MapReduce快100倍,並且在處理基於Hadoop MapReduce自己的磁盤數據時速度也快了10倍。這種比較並不徹底公平,這不只僅是由於對於Spark的典型用例,原始速度每每比批處理更重要,在這種狀況下相似MapReduce的解決方案仍然很是出色。基於Hadoop基於YARN的體系結構爲Spark和其餘應用程序共享通用集羣和數據集提供了基礎,同時確保一致的服務和響應級別。編程

下圖是構成Spark的生態系統,強大的生態系統:緩存

clipboard.png

其中 Spark Core是Spark的核心API,而且支持Scala,Python,Java編程語言,R,SQL分析語言,在以Spark Core爲基礎之上,有着Spark SQL,Spark Streaming,Spark Mlib,Spark Graphx四個親兒子。這四個組件,我將在以後的文章詳細的介紹,而且會從應用和代碼示例來說解。服務器

spark do what?

Spark可以一次處理數PB的數據,分佈在數千個協做的物理或虛擬服務器集羣中。網絡

(科普:什麼是分佈式計算?所謂分佈式計算是一門計算機科學,它研究如何把一個須要很是巨大的計算能力才能解決的問題分紅許多小的部分,而後把這些部分分配給許多計算機進行處理,最後把這些計算結果綜合起來獲得最終的結果。分佈式網絡存儲技術是將數據分散的存儲於多臺獨立的機器設備上。分佈式網絡存儲系統採用 可擴展的系統結構,利用多臺存儲服務器分擔存儲負荷,利用位置服務器定位存儲信息,不但解決了傳統集中式存儲系統中單存儲服務器的瓶頸問題,還提升了系統的可靠性、可用性和擴展性。)

它有一套普遍的開發者庫和API,而且支持Java,Python,R和Scala等語言; (如今在寫spark應用程序時,最長使用的是Scala語言,由於spark的源碼就是用scala來編寫的,再其次就是python語言,python的第三方庫不少,節省了程序員不少的時間要去本身實現某些功能,這兩個語言的語法都很簡潔,上手簡單,支持函數式編程)
它的靈活性使其很是適合於各類用例。Spark一般與Hadoop的數據存儲模塊HDFS一塊兒使用,但它能夠與HBase,Cassandra,MapR-DB,MongoDB和Amazon S3 等其餘流行的數據存儲子系統集成,而且能夠和Kafka,Flume等數據傳輸隊列和數據採集工具一塊兒搭配使用。架構

who use spark?

Spark是爲數據科學設計的,其抽象使數據科學變得更加簡單。數據科學家一般使用機器學習 - 一套能夠從數據中學習的技術和算法。這些算法一般是迭代的,Spark將數據集緩存在內存中的能力大大加快了迭代數據處理速度,使得Spark成爲實現這種算法的理想處理引擎。
Spark是爲大數據工程師設計的,在強大的計算能力和優秀的架構設計面前,可讓數據工程師在不論是離線情景下仍是實時的業務需求下,均可以放心的選擇使用Spark,一次讀取,並行化處理,對數據集支持容錯,操做靈活性,第三方社區的積極支持,雖然Spark還面對着缺點,但我相信Spark的明天會更好。框架

why use spark?

選擇Spark有不少緣由,但三個關鍵:

簡單性:Spark的功能能夠經過一組豐富的API來訪問,全部這些都是專門爲大規模數據快速輕鬆地交互而設計的。這些API都有詳細的文檔和結構,使數據科學家和應用程序開發人員可以快速地將Spark工做。

速度:Spark是爲速度而設計的,能夠在內存和磁盤上運行。來自Databricks的團隊使用Spark在2014年Daytona Grey Sort 100TB Benchmark挑戰賽中與加利福尼亞大學聖地亞哥分校的一隊隊員並列第一名。挑戰包括處理靜態數據集; Databricks團隊可以在23分鐘內處理存儲在固態硬盤上的100TB的數據,而以前的獲勝者經過使用Hadoop和不一樣的集羣配置須要72分鐘的時間。在支持存儲在內存中的數據的交互式查詢時,Spark能夠執行得更好。在這種狀況下,有人聲稱Spark能夠比Hadoop的MapReduce快100倍。

支持:Spark支持一系列編程語言,包括Java,Python,R和Scala。儘管一般與HDFS密切相關,但Spark還包括對Hadoop生態系統及其之後的許多領先存儲解決方案的緊密集成的本地支持。此外,Apache Spark社區是大型的,活躍的和國際性的。包括Databricks,IBM以及全部主要Hadoop供應商在內的不斷增加的商業提供商爲Spark解決方案提供全面的支持。

spark use case

隨着 Apache Spark的發展勢頭繼續增加,幾乎全部一站式大數據平臺都早已集成Spark,國外最爲著名的CDH,HDP,國內的TDH等,全部行業用於實際應用。正在使用Spark來改善他們的業務,經過檢測模式和提供可操做的洞察力來推進組織變革,並開始改變生活的某些方面。下面提供了一些從保險到互聯網公司如何使用Spark的例子:

保險行業: 經過使用Spark的機器學習功能來處理和分析全部索賠,優化索賠報銷流程。
醫療保健: 使用Spark Core,Streaming和SQL構建病人護理系統。
零售業 : 使用Spark分析銷售點數據和優惠券使用狀況。
互聯網 : 使用Spark的ML功能來識別虛假的配置文件,並加強他們向客戶展現的產品匹配。
銀行業 : 使用機器學習模型來預測某些金融產品的零售銀行客戶的資料。
政府 : 分析地理,時間和財政支出。
科學研究 : 經過時間,深度,地理分析地震事件來預測將來的事件。
投資銀行 : 分析日內股價以預測將來的價格走勢。
地理空間分析: 按時間和地理分析Uber旅行,以預測將來的需求和訂價。
Twitter情緒分析: 分析大量的推文,以肯定特定組織和產品的積極,消極或中立的情緒。
航空公司 : 創建預測航空旅行延誤的模型。
設備 : 預測建築物超過臨界溫度的可能性。

上面所舉的應用實例是想讓你們更直接的去理解,Spark到底在實際的生產環境中能帶來什麼樣的做用和發揮什麼樣的價值,對之後的學習,能更好的指導方向!

加油吧~~ 接下來的Spark分享應該會從Spark Core開始~

相關文章
相關標籤/搜索