大數(shù)據(jù)分析平臺解析:什么是Apache Spark?

責任編輯:editor006

作者:三文魚

2017-11-15 15:59:59

摘自:IT168

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

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

2009年,Apache Spark從美國U.C. Berkeley的 AMPLab為起步,現(xiàn)在已經(jīng)成為世界上主要的大數(shù)據(jù)分布式處理框架之一。Spark可以以各種方式進行部署,為Java、Scala、Python和R編程語言提供本地綁定,并支持SQL、流數(shù)據(jù)、機器學習和圖形處理。已經(jīng)被銀行、電信公司、游戲公司、政府以及蘋果、Facebook、IBM和微軟等領域的企業(yè)和科技巨頭所使用。

Spark開箱即用,可以在獨立的集群模式中運行,只需要在集群中的每臺計算機上使用Apache Spark框架和JVM即可。然而,用戶更希望利用資源或集群管理系統(tǒng)負責分配需求到員工手中。在企業(yè)中,這通常都是在Hadoop YARN上運行(這是Cloudera和Hortonworks發(fā)行版運行Spark作業(yè)的方式),但Apache Spark也可以在Apache Mesos上運行。同時,其在為Kubernetes添加本地支持方面也取得了進展。

 

大數(shù)據(jù)分析平臺解析 啥是Apache Spark

 

如果正在處理一個托管解決方案,那么可以在Amazon EMR,Google Cloud Dataproc和Microsoft Azure HDInsight中找到Apache Spark。擁有Apache Spark創(chuàng)始人的Databricks公司,也提供Databricks統(tǒng)一分析平臺。這是一個全面的托管服務,提供Apache Spark集群、流支持、集成的基于Web的notebook開發(fā),以及在標準Apache Spark發(fā)行版中優(yōu)化的云I / O性能.

Spark VS Hadoop

目前,大多數(shù)Hadoop發(fā)行版中都包含了Spark。但是由于Spark本身的兩大優(yōu)勢,使Spark在處理大數(shù)據(jù)時已經(jīng)成為首選框架,超越了Hadoop 引入MapReduce范例。

第一個優(yōu)勢是速度。Spark的內(nèi)存數(shù)據(jù)引擎在某些情況下,可以執(zhí)行比MapReduce快一百倍的任務,特別是與需要在stage之間將狀態(tài)寫回到磁盤的多級作業(yè)相比。即使Apache Spark的作業(yè)數(shù)據(jù)不能完全包含在內(nèi)存中,但也比MapReduce快10倍左右。

第二個優(yōu)勢是交互友好的Spark API。與Spark加速一樣重要的是,用戶認為Spark API的友好性更為重要。

Spark核心

與MapReduce和其他Apache Hadoop組件相比,Apache Spark API對開發(fā)人員非常友好,在簡單的方法調(diào)用后,隱藏了分布式處理引擎的許多復雜性。典型的例子是,幾乎50行MapReduce代碼在文檔中計算單詞的數(shù)量在可以減少到只有幾行代碼(這里顯示在Scala中):

 

大數(shù)據(jù)分析平臺解析 啥是Apache Spark

 

通過提供與Python和R等數(shù)據(jù)分析流行語言的綁定,以及對企業(yè)更友好的Java和Scala的綁定,Apache Spark使應用程序開發(fā)人員和數(shù)據(jù)科學家以可訪問的方式利用其可擴展性和速度。

Spark RDD

Apache Spark的核心是彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset,RDD),是一中抽象編程,它是跨計算集群拆分的不可變對象的集合。在RDD上的操作也可以跨集群進行,并在并行處理過程中執(zhí)行,從而實現(xiàn)快速可擴展的并行處理。

RDD可以通過簡單的文本文件、SQL數(shù)據(jù)庫、NoSQL存儲(如Cassandra和MongoDB)以及Amazon S3存儲等來創(chuàng)建。Spark Core API的大部分構(gòu)建在RDD概念之上,支持傳統(tǒng)的映射,還為連接數(shù)據(jù)集、過濾、采樣和聚合提供了內(nèi)置支持。

Spark通過結(jié)合驅(qū)動程序核心進程,以分布式方式運行,該進程將Spark應用程序分解成任務,并將其分發(fā)到工作的執(zhí)行程序進程中,這些執(zhí)行程序可以根據(jù)應用程序的需要進行擴展和縮減。

Spark SQL

Spark SQL最初被稱為“Shark”,現(xiàn)在對Apache Spark項目變得越來越重要。它可能是當今開發(fā)人員在創(chuàng)建應用程序時最常用的界面,Spark SQL專注于結(jié)構(gòu)化數(shù)據(jù)處理,使用從R和Python(在Pandas中)借用的數(shù)據(jù)框架方法。正如它的名字,Spark SQL還提供了一個SQL2003兼容接口來查詢數(shù)據(jù),將Apache Spark的強大功能帶給分析師和開發(fā)人員。

除了標準的SQL支持,Spark SQL還提供了一個標準接口,用于讀取和寫入其他數(shù)據(jù)存儲,包括JSON、HDFS、Apache Hive、JDBC、Apache ORC和Apache Parquet,所有這些都支持開箱即用。例如Apache Cassandra、MongoDB、Apache HBase以及其他許多受歡迎的數(shù)據(jù)庫,可以通過從Spark Packages生態(tài)系統(tǒng)中提取單獨的連接器來使用。

從dataframe中選擇列:

 

大數(shù)據(jù)分析平臺解析 啥是Apache Spark

 

使用SQL接口,將dataframe注冊為臨時表,之后對它發(fā)出SQL查詢:

 

大數(shù)據(jù)分析平臺解析 啥是Apache Spark

 

在后臺,Apache Spark使用名為Catalyst的查詢優(yōu)化器來檢查數(shù)據(jù)和查詢,以便為數(shù)據(jù)局部性和計算提供高效的查詢計劃,在整個集群中執(zhí)行所需的計算。在Apache Spark 2.x中,dataframes和datasets的Spark SQL接口(實質(zhì)上是一個類型化的數(shù)據(jù)框,可以在編譯時檢查正確性,并在運行時利用進一步的內(nèi)存和計算優(yōu)化)是推薦的開發(fā)方法。RDD接口仍然可用,但只有在無法在Spark SQL范例中封裝的情況下才推薦使用。

Spark MLlib

Apache Spark還捆綁了一些用于將機器學習和圖形分析技術應用于數(shù)據(jù)的庫。Spark MLlib包含一個用于創(chuàng)建機器學習管道的框架,允許在任何結(jié)構(gòu)化數(shù)據(jù)集上輕松實現(xiàn)特征提取、選擇和轉(zhuǎn)換。MLLib采用分布式實現(xiàn)的集群和分類算法,如k均值聚類和隨機森林,可輕松地在自定義管道中交換。模型可以由Apache Spark的數(shù)據(jù)科學家使用R或Python進行培訓,MLLib保存,然后導入到基于Java或Scala的管道中供生產(chǎn)使用。

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

Spark GraphX

Spark GraphX提供了一系列用于處理圖形結(jié)構(gòu)的分布式算法,包括Google的PageRank的實現(xiàn)。這些算法使用Spark Core的RDD方法來建模數(shù)據(jù); GraphFrames包允許在dataframe上做圖形操作,包括利用Catalyst優(yōu)化器進行圖查詢。

Spark Streaming

Spark Streaming是Apache Spark的早期添加物,它幫助在需要實時或接近實時處理的環(huán)境中獲得牽引力。以前,Apache Hadoop領域的批處理和流處理是分開的。可以為批處理需求編寫MapReduce代碼,并使用像Apache Storm這樣的實時流媒體。這顯然導致不同的代碼庫需要保持同步的應用程序域,盡管是基于完全不同的框架,需要不同的資源。

Spark Streaming將Apache Spark的批處理概念擴展到流,通過將流分解為連續(xù)的一系列微格式,然后使用Apache Spark API進行操作。通過這種方式,批處理和流操作中的代碼可以共享(大部分)相同的代碼,運行在同一個框架上,從而減少開發(fā)人員和操作員的開銷。

對Spark Streaming方法的一個批評是:在需要對傳入數(shù)據(jù)進行低延遲響應的情況下,microbatching可能無法與Apache Storm、Apache Flink和Apache Apex等其他支持流的框架的性能相匹配,所有這些都使用純粹的流媒體方法而不是微型媒體。

結(jié)構(gòu)化流媒體

結(jié)構(gòu)化流式處理(在Spark 2.x中添加)將影響Spark SQL對Spark API進行Spark流式處理,結(jié)果將是更高級別的API,更易于編寫應用程序。在結(jié)構(gòu)化流的情況下,高級API本質(zhì)上允許開發(fā)人員創(chuàng)建無限流式數(shù)據(jù)框和數(shù)據(jù)集。它還解決了用戶在早期框架中遇到的一些非常真實的痛點,尤其是在處理事件時間聚合和延遲傳遞消息方面。結(jié)構(gòu)化流的所有查詢都通過Catalyst查詢優(yōu)化器,甚至可以交互方式運行,允許用戶對實時流數(shù)據(jù)執(zhí)行SQL查詢。

結(jié)構(gòu)化數(shù)據(jù)流在Apache Spark中仍然是一個新部分,在Spark 2.2發(fā)行版中已經(jīng)被標記為生產(chǎn)就緒。但是,結(jié)構(gòu)化流是面向平臺的流媒體應用程序的未來,因此如果要構(gòu)建新的流式傳輸應用程序,應該使用結(jié)構(gòu)化流式處理。傳統(tǒng)的Spark Streaming API將繼續(xù)得到支持,但是該項目建議移植到結(jié)構(gòu)化流式處理,因為新方法使得編寫和維護流代碼更容易。

Apache Spark的下一步是什么?

盡管結(jié)構(gòu)化流式傳輸為Spark Streaming提供了高級改進,但它目前依賴于處理流式數(shù)據(jù)的相同的微處理方案。Apache Spark團隊正在努力為平臺帶來連續(xù)的流媒體處理,這應該能夠解決許多處理低延遲響應的問題(聲稱大約1ms,這將會非常令人印象深刻)。

除此之外,Apache Spark還將通過深度學習管道增加對深度學習的支持。使用MLlib的現(xiàn)有管道結(jié)構(gòu),將能夠在幾行代碼中構(gòu)建分類器,并自定義Tensorflow圖形或Keras模型應用于傳入數(shù)據(jù)。這些圖表和模型甚至可以注冊為自定義的Spark SQL UDF(用戶定義的函數(shù)),以便深度學習模型可以作為SQL語句的一部分應用于數(shù)據(jù)。

鏈接已復制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號