如何用 Spark 快速開發應用?

EluQ發表於2015-07-14

如果你還沒有仔細研究過 Spark (或者還不知道 Spark 是什麼),那麼本文很好地介紹了 Spark。描述了基本的資料結構、shell ,並對其包含的 API 進行了概述。


你已經知道的Hadoop是部署大規模大資料應用的最好的,併兼具高成本效益的平臺之一。但當Hadoop與Apache Spark提供的執行力相結合的時候會更加強大。雖然Spark可在許多大資料平臺上使用,但將其部署在有效的Hadoop平臺上會更好,你可以使用已知工具快速構建大型應用。

 

什麼是Apache Spark?

Apache Spark是處理大量資料的通用引擎。它是設計用來允許開發者快速部署大資料應用的。Spark的特點是它的彈性分散式資料集(RDDs)。資料結構既可以存在記憶體中也可以在磁碟上。將物件儲存於記憶體中將帶來可觀的效能提升,因為應用程式無需將時間浪費在從磁碟中獲取資料。

如果你有大的叢集,你的資料可能傳遍數百個甚至上千個節點。Apache Spark不僅快而且可靠。Spark的設計具有容錯性,它能夠從諸如節點或程式錯誤所導致的資料損失中恢復。

你可以在任何檔案系統中使用Apache Spark,但是通過Hadoop,你將得到一個可靠的,分散式的檔案系統,作為你的大資料應用的基礎。

大資料應用程式開發的效率的另一個主要來源是人的因素。開發工具使得工作比它的現狀更加複雜,但Apache Spark跳出了程式設計師的方式。在使用Apache Spark快速地應用開發中有兩個關鍵:shell 和 API。

 

Shell

指令碼語言的最大好處之一是它們的互動式 shell。利用各種方式回到早起的 Unix 時代,shell 使得你快速地嘗試你的想法而不會被寫/測試/編譯/除錯的迴圈放緩速度。

有想法?現在你就可以試試並且看看發生了什麼。想法很簡單,就是使你在本地機器上更有效率。當你使用大資料叢集后,靜觀其變吧。

Spark提供了Scala或者Python的Shell。你可以選擇任意一個你所習慣的 shell。類似Unix的系統中,你可以在Spark的目錄 ./bin/pyspark下找到Python的shell,在./bin/sparkshell下找到Scala的shell。

一旦你找到了shell並且執行起來,你就可以將資料匯入RDDs並且對這些資料執行所有型別的操作,例如統計行數或者找到列表中的第一個專案。操作分為兩種:一種是轉換,它在一個集合中建立新的列表;另一種是動作,它返回值。你也可以寫自定義函式並將它們應用到你的資料。這些是為你建立RDD物件的Python方法。

例如,向Spark匯入一個文字檔案作為在Python的shell中的RDD,如下:

這是一個統計行數的動作:

這是一個返回含有“MapR”行的列表轉換:

參照“Spark開發指南”可得到更多的資訊。

 

API

儘管Spark本身是用Scala寫的,但你可以用一些API使得你的工作容易些。如果你用過Python或者Scala的shells,那麼你就已經在用這些語言的API了。你需要做的就是將你的程式儲存為指令碼而僅需很少的修改。

如果你在尋找構建更加健壯的程式,你可以使用Java API。即使你已經用Java完全實現了你的程式,你仍然可以在shell中勾畫出的你的想法以確保在將其部署到你的叢集之前你的演算法是正確的。

Spark發行了一些庫:Spark SQL,Spark Streaming(建立在Spark上的實時計算框架),the MLlib machine learning library(機器學習庫)和GraphX。

你可以通過使用一些易用的API來構建複雜的應用並且實時部署它們。你甚至可以以混合和匹配技術來構建應用程式或者大資料管道,例如從機器學習的結果生成圖的應用。由 Hadoop平臺支援的 Apache Spark  提供了強大和靈活性。

通過完全支援Spark棧的MapR分佈,對程式設計師很容易地實時建立一個複雜的大資料應用是可能的,就像批處理資料……

 

總結

世界變化快。你的業務所積累的資料也在不斷增長,你需要一種方法來快速倒騰資料。當你能夠構建大資料叢集並嘗試去篩選資料時,你需要正確的工具–設計用來快速處理大量資料的工具。

而執行在Hadoop上的Spark可以做到這點,它的最大優勢在於提高開發人員的生產力上。通過使用Spark上的Scala和Python,在更短的時間裡你可以做更多的事。你和你的開發人員可以暢遊在你們的大資料思想中。

相關文章