1. 程式人生 > >零基礎學習大資料怎樣入門Spark

零基礎學習大資料怎樣入門Spark

1.什麼是Spark

Apache Spark是一個圍繞速度、易用性和複雜分析構建的大資料處理框架。最初在2009年由加州大學伯克利分校的AMPLab開發,並於2010年成為Apache的開源專案之一。

與Hadoop和Storm等其他大資料和MapReduce技術相比,Spark有如下優勢,一起來看看吧。

首先,Spark為我們提供了一個全面、統一的框架用於管理各種有著不同性質(文字資料、圖表資料等)的資料集和資料來源(批量資料或實時的流資料)的大資料處理的需求。

Spark可以將Hadoop叢集中的應用在記憶體中的執行速度提升100倍,甚至能夠將應用在磁碟上的執行速度提升10倍。

Spark讓開發者可以快速的用Java、Scala或Python編寫程式。它本身自帶了一個超過80個高階操作符集合。而且還可以用它在shell中以互動式地查詢資料。

除了Map和Reduce操作之外,它還支援SQL查詢,流資料,機器學習和圖表資料處理。開發者可以在一個數據管道用例中單獨使用某一能力或者將這些能力結合在一起使用。

在這個Apache Spark文章系列的第一部分中,我們將瞭解到什麼是Spark,它與典型的MapReduce解決方案的比較以及它如何為大資料處理提供了一套完整的工具。

2.Hadoop和Spark

Hadoop這項大資料處理技術大概已有十年曆史,而且被看做是首選的大資料集合處理的解決方案。MapReduce是一路計算的優秀解決方案,不過對於需要多路計算和演算法的用例來說,並非十分高效。資料處理流程中的每一步都需要一個Map階段和一個Reduce階段,而且如果要利用這一解決方案,需要將所有用例都轉換成MapReduce模式。

在下一步開始之前,上一步的作業輸出資料必須要儲存到分散式檔案系統中。因此,複製和磁碟儲存會導致這種方式速度變慢。另外Hadoop解決方案中通常會包含難以安裝和管理的叢集。而且為了處理不同的大資料用例,還需要整合多種不同的工具(如用於機器學習的Mahout和流資料處理的Storm)。

如果想要完成比較複雜的工作,就必須將一系列的MapReduce作業串聯起來然後順序執行這些作業。每一個作業都是高時延的,而且只有在前一個作業完成之後下一個作業才能開始啟動。

而Spark則允許程式開發者使用有向無環圖(DAG)開發複雜的多步資料管道。而且還支援跨有向無環圖的記憶體資料共享,以便不同的作業可以共同處理同一個資料。

Spark執行在現有的Hadoop分散式檔案系統基礎之上(HDFS)提供額外的增強功能。它支援將Spark應用部署到現存的Hadoop v1叢集(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN叢集甚至是Apache Mesos之中。

我們應該將Spark看作是Hadoop MapReduce的一個替代品而不是Hadoop的替代品。其意圖並非是替代Hadoop,而是為了提供一個管理不同的大資料用例和需求的全面且統一的解決方案。

3.Spark特性

Spark通過在資料處理過程中成本更低的洗牌(Shuffle)方式,將MapReduce提升到一個更高的層次。利用記憶體資料儲存和接近實時的處理能力,Spark比其他的大資料處理技術的效能要快很多倍。

Spark還支援大資料查詢的延遲計算,這可以幫助優化大資料處理流程中的處理步驟。Spark還提供高階的API以提升開發者的生產力,除此之外還為大資料解決方案提供一致的體系架構模型。

Spark將中間結果儲存在記憶體中而不是將其寫入磁碟,當需要多次處理同一資料集時,這一點特別實用。Spark的設計初衷就是既可以在記憶體中又可以在磁碟上工作的執行引擎。當記憶體中的資料不適用時,Spark操作符就會執行外部操作。Spark可以用於處理大於叢集記憶體容量總和的資料集。

Spark會嘗試在記憶體中儲存儘可能多的資料然後將其寫入磁碟。它可以將某個資料集的一部分存入記憶體而剩餘部分存入磁碟。開發者需要根據資料和用例評估對記憶體的需求。Spark的效能優勢得益於這種記憶體中的資料儲存。大資料學習群142973723

Spark的其他特性包括:

· 支援比Map和Reduce更多的函式。

· 優化任意操作運算元圖(operator graphs)。

· 可以幫助優化整體資料處理流程的大資料查詢的延遲計算。

· 提供簡明、一致的Scala,Java和Python API。

· 提供互動式Scala和Python Shell。目前暫不支援Java。

Spark是用Scala程式設計語言編寫而成,運行於Java虛擬機器(JVM)環境之上。目前支援如下程式設計語言編寫Spark應用:

· Scala

· Java

· Python

· Clojure

· R