1. 程式人生 > >Spark2 x 快速入門教程 1

Spark2 x 快速入門教程 1

               

Spark2.x 課程介紹

一、實驗介紹

1.1 實驗內容

Spark 是 Apache 高階專案裡面較火的大資料處理的計算引擎,對比 Spark 1.x 版本,Spark 2.x 有哪些改進,本節課主要講解 Spark2.x 新特性。

1.2 先學課程

為了保證可以在實驗樓環境中完成本次實驗,我們在原書內容基礎上補充了一系列的實驗指導,比如實驗截圖,程式碼註釋,幫助您更好得實戰。如果您對於實驗有疑惑或者建議可以隨時在討論區中提問,與同學們一起探討。

1.3 實驗知識點

  • 對標準的SQL支援
  • DataFrame和Dataset API 介紹
  • Structured Streaming

1.4 實驗環境

  • hadoop-2.6.1
  • spark-2.1.0-bin-hadoop2.6
  • scala-2.11.7
  • Xfce 終端

本課程屬於中等難度級別,適合具有 scala 基礎的使用者,如果對 spark1.x 瞭解能夠更好的上手本課程。

二、Spark2.x 介紹

2.1 Spark2.x 與 Spark1.x 關係

Spark2.x 引入了很多優秀特性,效能上有較大提升,API 更易用。在“程式設計統一”方面非常驚豔,實現了離線計算和流計算 API 的統一,實現了 Spark sql 和 Hive Sql 操作 API 的統一。Spark 2.x 基本上是基於 Spark 1.x 進行了更多的功能和模組的擴充套件,及效能的提升。

2.2 Spark2.x 新特性

1). whole-stage code generation

大幅提高計算效能,因為把物理計劃變成硬編碼,每秒處理的 sql 中的資料量增加十倍,即對物理執行的多次呼叫轉化為程式碼 for 迴圈,減少執行的函式呼叫次數,當資料記錄多時,這個呼叫次數時很大的。

2). sparksession 實現 hivecontext 和 sqlcontext 統一

Spark2.0 中引入了 SparkSession 的概念,它為使用者提供了一個統一的切入點來使用 Spark 的各項功能,使用者不但可以使用 DataFrame 和Dataset 的各種 API,學習 Spark2 的難度也會大大降低。

3). 統一 Scala 和 Java 中 DataFrames 和 Datasets 的 API。

它們都是提供給使用者使用,包括各類操作介面的 API,1.3 版本引入DataFrame,1.6版本引入Dataset,Spark2.0提供的功能是將二者統一,DataFrame 僅僅是 Dataset 的一個別名。有型別的方法(typed methods)(比如:map, filter, groupByKey)和無型別的方法(untyped methods)(比如:select, groupBy)目前在 Dataset 類上可用。同樣,新的 Dataset 介面也在 Structured Streaming中使用。因為編譯時型別安全(compile-time type-safety)在 Python 和 R 中並不是語言特性,所以Dataset的概念並不在這些語言中提供相應的 API。而 DataFrame 仍然作為這些語言的主要程式設計抽象。

4). Structured Streaming

Spark Streaming 是把流式計算看成一個一個的離線計算來完成流式計算,提供了一套 Dstream 的流 API,相比於其他的流式計算,Spark Streaming 的優點是容錯性和吞吐量上要有優勢,在 2.0以前的版本,使用者在使用時,如果有流計算,又有離線計算,就需要用二套 API 去編寫程式,一套是 RDD API,一套是 Dstream API。而且 Dstream API 在易用性上遠不如 SQL 或 DataFrame。

為了真正將流式計算和離線計算在程式設計 API 上統一,同時也讓 Streaming 作業能夠享受 DataFrame/Dataset 上所帶來的優勢:效能提升和 API 易用,於是提出了 Structured Streaming。最後我們只需要基於 DataFrame/Dataset 可以開發離線計算和流式計算的程式。

5). 其它特性

mllib 裡的計算用 DataFrame-based API 代替以前的 RDD 計算邏輯,提供更多的 R 語言演算法,預設使用 Scala 2.11 編譯與執行。

三、總結

本節主要講解了Spark 2.x 新特性,從大體上了解 Spark2.x ,為接下來的學習做準備。

本實驗參考下列連結製作: