Spark教程


Apache Spark是一個集羣計算設計的快速計算。它是建立在Hadoop MapReduce之上,它擴展了 MapReduce 模式,有效地使用更多類型的計算,其中包括交互式查詢和流處理。這是一個簡單的Spark教程,介紹了Spark核心編程的基礎知識。


工業公司廣泛的使用 Hadoop 來分析他們的數據集。其原因是,Hadoop框架是基於簡單的編程模型(MapReduce),並且它使用的計算解決方案,是可擴展的,柔性的,容錯和低成本。 在這裏,主要關心的是在查詢之間等待時間和等待時間來運行程序處理大型數據集的速度。

Spark由Apache軟件基金會對於加快Hadoop計算軟件的過程。

作爲對一個共同的信念,Spark不是 Hadoop 的修改版本,不依賴於Hadoop,因爲它有自己的集羣管理。Hadoop僅僅是實現Spark的方式之一。

Spark使用Hadoop的方式有兩種- 一種是存儲和第二個是處理。由於Spark有自己的集羣管理計算,所以一般它使用Hadoop只有存儲的目的。

Apache Spark

Apache Spark是一個快速的集羣計算技術,設計用於快速計算。它是基於Hadoop MapReduce和它擴展了MapReduce模型,以有效地將其用於多種類型的計算,其中包括交互式查詢和流處理。Spark的主要特徵是其內存集羣計算,增加的應用程序的處理速度。

Spark旨在涵蓋廣泛的工作負載,如批量應用,迭代算法,交互式查詢和分流。除了支持所有這些工作負載在各自的系統中,它減少了維護單獨工具的管理負擔。

Apache Spark的演變

Spark是在加州大學伯克利分校的AMPLab由馬太·扎哈里亞在2009年開發的Hadoop子項目之一。它在2010年開源,在BSD許可下。它在2013年捐贈給Apache Software 基金,現在的Apache Spark已經在2014年2月成爲Apache的頂級項目。

Apache Spark特色

Apache Spark有以下特點。

  • 速度 − Spark有助於運行Hadoop集羣應用,在存儲器高達100倍更快的速度,以及10倍的速度在磁盤上運行時。這可以通過減少讀/寫操作數到磁盤。它存儲在內存中的中間處理數據。

  • 支持多語言 − Spark 提供了Java, Scala, Python的內置API。因此,可以使用不同語言來寫應用程序。Spark 配備了80個高層次的操作符進行互動查詢。

  • 高級分析 − Spark不只支持「Map」和「reduce」。它還支持SQL查詢,流數據,機器學習(ML),和圖形的算法。

Spark在Hadoop上建立

下圖顯示了Spark 如何使用Hadoop組件的三種方式來構建。

Spark教程

有三種方法部署Spark ,如下面所解釋。

  • 單機版 − Spark獨立部署是指Spark佔據在HDFS之上(Hadoop分佈式文件系統)並將空間分配給HDFS。在這裏,Spark和MapReduce將並列覆蓋所有Spark的作業集羣。

  • Hadoop Yarn − Hadoop Yarn部署方式,簡單地說,spark運行在Yarn沒有任何必要預安裝或使用root訪問權限。它有助於Spark融入Hadoop生態系統和Hadoop堆棧。它允許在其它部件疊上層的頂部上運行。

  • Spark 在 MapReduce (SIMR) − Spark在MapReduce的用於啓動spark作業,除了獨立部署。通過SIMR,用戶可以啓動Spark和使用Shell,而不需要任何管理權限。

Spark組件

下圖說明了Spark的不同組成部分。

Spark教程

Apache Spark 核心

Spark核心是底層一般執行引擎,所有其他的功能都是建立在Spark的平臺之上。 它提供了內存計算和引用數據集在外部存儲系統。

Spark SQL

星火SQL是引入了一種名爲SchemaRDD一個新的數據抽象,它提供了結構化和半結構化數據的支持,它是Spark核心的組成部分。

Spark 數據流

Spark數據流充分利用Spark核心快速調度能力進行流分析。它攝取的數據在小型分批進行RDD(彈性分佈式數據集),對這些小批量的數據轉換。

MLlib (機器學習庫)

MLlib是一個分佈式的機器學習框架的分佈式存儲器爲基礎的Spark架構。它根據基準,由MLlib開發商對交替最小二乘(ALS)實現完成。Spark MLlib 9倍快於Hadoop基於磁盤的版本(前Mahout中獲得了星火接口)Apache Mahout 。

GraphX

GraphX是Spark頂部上的分佈式圖形處理框架。它提供了用於表達圖表計算,並可以通過使用預凝膠抽象API來建模用戶定義的圖形的API。它還提供了這種抽象的優化運行。