天天看點

大資料分析平台解析:什麼是Apache Spark?

Apache Spark是一款快速、靈活且對開發者友好的工具,也是大型SQL、批處理、流處理和機器學習的領先平台。

2009年,Apache Spark從美國U.C. Berkeley的

AMPLab為起步,現在已經成為世界上主要的大資料分布式處理架構之一。Spark可以以各種方式進行部署,為Java、Scala、Python和R程式設計語言提供本地綁定,并支援SQL、流資料、機器學習和圖形處理。已經被銀行、電信公司、遊戲公司、政府以及蘋果、Facebook、IBM和微軟等領域的企業和科技巨頭所使用。

Spark開箱即用,可以在獨立的叢集模式中運作,隻需要在叢集中的每台計算機上使用Apache

Spark架構和JVM即可。然而,使用者更希望利用資源或叢集管理系統負責配置設定需求到員工手中。在企業中,這通常都是在Hadoop

YARN上運作(這是Cloudera和Hortonworks發行版運作Spark作業的方式),但Apache Spark也可以在Apache

Mesos上運作。同時,其在為Kubernetes添加本地支援方面也取得了進展。

大資料分析平台解析:什麼是Apache Spark?

如果正在處理一個托管解決方案,那麼可以在Amazon EMR,Google Cloud Dataproc和Microsoft Azure

HDInsight中找到Apache Spark。擁有Apache

Spark創始人的Databricks公司,也提供Databricks統一分析平台。這是一個全面的托管服務,提供Apache

Spark叢集、流支援、內建的基于Web的notebook開發,以及在标準Apache Spark發行版中優化的雲I / O性能.

Spark VS Hadoop

目前,大多數Hadoop發行版中都包含了Spark。但是由于Spark本身的兩大優勢,使Spark在處理大資料時已經成為首選架構,超越了Hadoop 引入MapReduce範例。

第一個優勢是速度。Spark的記憶體資料引擎在某些情況下,可以執行比MapReduce快一百倍的任務,特别是與需要在stage之間将狀态寫回到磁盤的多級作業相比。即使Apache

Spark的作業資料不能完全包含在記憶體中,但也比MapReduce快10倍左右。

第二個優勢是互動友好的Spark API。與Spark加速一樣重要的是,使用者認為Spark API的友好性更為重要。

Spark核心

與MapReduce和其他Apache Hadoop元件相比,Apache Spark

API對開發人員非常友好,在簡單的方法調用後,隐藏了分布式處理引擎的許多複雜性。典型的例子是,幾乎50行MapReduce代碼在文檔中計算單詞的數量在可以減少到隻有幾行代碼(這裡顯示在Scala中):

大資料分析平台解析:什麼是Apache Spark?

通過提供與Python和R等資料分析流行語言的綁定,以及對企業更友好的Java和Scala的綁定,Apache Spark使應用程式開發人員和資料科學家以可通路的方式利用其可擴充性和速度。

Spark RDD

Apache Spark的核心是彈性分布式資料集(Resilient Distributed

Dataset,RDD),是一中抽象程式設計,它是跨計算叢集拆分的不可變對象的集合。在RDD上的操作也可以跨叢集進行,并在并行處理過程中執行,進而實作快速可擴充的并行處理。

RDD可以通過簡單的文本檔案、SQL資料庫、NoSQL存儲(如Cassandra和MongoDB)以及Amazon S3存儲等來建立。Spark Core API的大部分建構在RDD概念之上,支援傳統的映射,還為連接配接資料集、過濾、采樣和聚合提供了内置支援。

Spark通過結合驅動程式核心程序,以分布式方式運作,該程序将Spark應用程式分解成任務,并将其分發到工作的執行程式程序中,這些執行程式可以根據應用程式的需要進行擴充和縮減。

Spark SQL

Spark SQL最初被稱為“Shark”,現在對Apache

Spark項目變得越來越重要。它可能是當今開發人員在建立應用程式時最常用的界面,Spark

SQL專注于結構化資料處理,使用從R和Python(在Pandas中)借用的資料架構方法。正如它的名字,Spark

SQL還提供了一個SQL2003相容接口來查詢資料,将Apache Spark的強大功能帶給分析師和開發人員。

除了标準的SQL支援,Spark SQL還提供了一個标準接口,用于讀取和寫入其他資料存儲,包括JSON、HDFS、Apache

Hive、JDBC、Apache ORC和Apache Parquet,所有這些都支援開箱即用。例如Apache

Cassandra、MongoDB、Apache HBase以及其他許多受歡迎的資料庫,可以通過從Spark

Packages生态系統中提取單獨的連接配接器來使用。

從dataframe中選擇列:

大資料分析平台解析:什麼是Apache Spark?

使用SQL接口,将dataframe注冊為臨時表,之後對它發出SQL查詢:

大資料分析平台解析:什麼是Apache Spark?

在背景,Apache

Spark使用名為Catalyst的查詢優化器來檢查資料和查詢,以便為資料局部性和計算提供高效的查詢計劃,在整個叢集中執行所需的計算。在Apache

Spark 2.x中,dataframes和datasets的Spark

SQL接口(實質上是一個類型化的資料框,可以在編譯時檢查正确性,并在運作時利用進一步的記憶體和計算優化)是推薦的開發方法。RDD接口仍然可用,但隻有在無法在Spark

SQL範例中封裝的情況下才推薦使用。

Spark MLlib

Apache Spark還捆綁了一些用于将機器學習和圖形分析技術應用于資料的庫。Spark

MLlib包含一個用于建立機器學習管道的架構,允許在任何結構化資料集上輕松實作特征提取、選擇和轉換。MLLib采用分布式實作的叢集和分類算法,如k均值聚類和随機森林,可輕松地在自定義管道中交換。模型可以由Apache

Spark的資料科學家使用R或Python進行教育訓練,MLLib儲存,然後導入到基于Java或Scala的管道中供生産使用。

雖然Spark MLlib涵蓋了基本的機器學習,包括分類、回歸、聚類和過濾,但它不包含模組化和訓練深度神經網絡的功能。

Spark GraphX

Spark GraphX提供了一系列用于處理圖形結構的分布式算法,包括Google的PageRank的實作。這些算法使用Spark

Core的RDD方法來模組化資料; GraphFrames包允許在dataframe上做圖形操作,包括利用Catalyst優化器進行圖查詢。

Spark Streaming

Spark Streaming是Apache Spark的早期添加物,它幫助在需要實時或接近實時處理的環境中獲得牽引力。以前,Apache

Hadoop領域的批處理和流處理是分開的。可以為批處理需求編寫MapReduce代碼,并使用像Apache

Storm這樣的實時流媒體。這顯然導緻不同的代碼庫需要保持同步的應用程式域,盡管是基于完全不同的架構,需要不同的資源。

Spark Streaming将Apache Spark的批處理概念擴充到流,通過将流分解為連續的一系列微格式,然後使用Apache

Spark

API進行操作。通過這種方式,批處理和流操作中的代碼可以共享(大部分)相同的代碼,運作在同一個架構上,進而減少開發人員和操作員的開銷。

對Spark Streaming方法的一個批評是:在需要對傳入資料進行低延遲響應的情況下,microbatching可能無法與Apache

Storm、Apache Flink和Apache Apex等其他支援流的架構的性能相比對,所有這些都使用純粹的流媒體方法而不是微型媒體。

結構化流媒體

結構化流式處理(在Spark 2.x中添加)将影響Spark SQL對Spark

API進行Spark流式處理,結果将是更進階别的API,更易于編寫應用程式。在結構化流的情況下,進階API本質上允許開發人員建立無限流式資料框和資料集。它還解決了使用者在早期架構中遇到的一些非常真實的痛點,尤其是在處理事件時間聚合和延遲傳遞消息方面。結構化流的所有查詢都通過Catalyst查詢優化器,甚至可以互動方式運作,允許使用者對實時流資料執行SQL查詢。

結構化資料流在Apache Spark中仍然是一個新部分,在Spark

2.2發行版中已經被标記為生産就緒。但是,結構化流是面向平台的流媒體應用程式的未來,是以如果要建構新的流式傳輸應用程式,應該使用結構化流式處理。傳統的Spark

Streaming API将繼續得到支援,但是該項目建議移植到結構化流式處理,因為新方法使得編寫和維護流代碼更容易。

Apache Spark的下一步是什麼?

盡管結構化流式傳輸為Spark Streaming提供了進階改進,但它目前依賴于處理流式資料的相同的微處理方案。Apache

Spark團隊正在努力為平台帶來連續的流媒體處理,這應該能夠解決許多處理低延遲響應的問題(聲稱大約1ms,這将會非常令人印象深刻)。

除此之外,Apache

Spark還将通過深度學習管道增加對深度學習的支援。使用MLlib的現有管道結構,将能夠在幾行代碼中建構分類器,并自定義Tensorflow圖形或Keras模型應用于傳入資料。這些圖表和模型甚至可以注冊為自定義的Spark

SQL UDF(使用者定義的函數),以便深度學習模型可以作為SQL語句的一部分應用于資料。

本文轉自d1net(轉載)