1. 程式人生 > >Apache Spark 2.3 重要特性介紹

Apache Spark 2.3 重要特性介紹

情況 緩存 panda image author cluster 所有 分析方法 deep

為了繼續實現 Spark 更快,更輕松,更智能的目標,Spark 2 3 在許多模塊都做了重要的更新,比如 Structured Streaming 引入了低延遲的連續處理(continuous processing);支持 stream-to-stream joins;

為了繼續實現 Spark 更快,更輕松,更智能的目標,Spark 2.3 在許多模塊都做了重要的更新,比如 Structured

Streaming 引入了低延遲的連續處理(continuous processing);支持 stream-to-stream joins;通過改善 pandas

UDFs 的性能來提升 PySpark;支持第四種調度引擎 Kubernetes clusters(其他三種分別是自帶的獨立模

式Standalone,YARN、Mesos)。除了這些比較具有裏程碑的重要功能外,Spark 2.3 還有以下幾個重要的更新:
引入 DataSource v2 APIs [SPARK-15689, SPARK-20928]

矢量化(Vectorized)的 ORC reader [SPARK-16060]

Spark History Server v2 with K-V store [SPARK-18085]

基於 Structured Streaming 的機器學習管道API模型 [SPARK-13030, SPARK-22346, SPARK-23037]

MLlib 增強 [SPARK-21866, SPARK-3181, SPARK-21087, SPARK-20199]

Spark SQL 增強 [SPARK-21485, SPARK-21975, SPARK-20331, SPARK-22510, SPARK-20236]

這篇文章將簡單地介紹上面一些高級功能和改進,更多的特性請參見 Spark 2.3 release notes:https://spark.apache.org/releases/spark-release-2-3-0.html。

毫秒延遲的連續流處理

Apache Spark 2.0 的 Structured Streaming 將微批次處理(micro-batch processing)從它的高級 APIs 中解耦出去,原因有兩個:首先,開發人員更容易學習這些 API,不需要考慮這些 APIs 的微批次處理情況;其次,它允許開發人員將一個流視為一個無限表,他們查詢流的數據,就像他們查詢靜態表一樣簡便。


大數據學習可以加群:716581014

但是,為了給開發人員提供不同的流處理模式,社區引入了一種新的毫秒級低延遲(millisecond low-latency)模式:連續模式(continuous mode)。

在內部,結構化的流引擎逐步執行微批中的查詢計算,執行周期由觸發器間隔決定,這個延遲對大多數真實世界的流應用程序來說是可以容忍的。

技術分享圖片

對於連續模式,流讀取器連續拉取源數據並處理數據,而不是按指定的觸發時間間隔讀取一批數據。通過不斷地查詢源數據和處理數據,新的記錄在到達時立即被處理,將等待時間縮短到毫秒,滿足低延遲的應用程序的需求,具體如下面圖所示:

技術分享圖片

目前連續模式支持 map-like Dataset 操作,包括投影(projections)、selections以及其他 SQL 函數,但是不支持 current_timestamp(), current_date() 以及聚合函數。它還支持將 Kafka 作為數據源和數據存儲目的地(sink),也支持 console 和 memory sink。

現在,開發人員可以根據延遲要求選擇模式連續或微量批處理,來構建大規模實時流式傳輸應用程序,同時這些系統還能夠享受到 Structured Streaming 提供的 fault-tolerance 和 reliability guarantees 特性。

簡單來說,Spark 2.3 中的連續模式是實驗性的,它提供了以下特性:

端到端的毫秒級延遲
至少一次語義保證
支持 map-like 的 Dataset 操作

流與流進行Join

Spark 2.0 版本的 Structured Streaming 支持流 DataFrame/Dataset 和靜態數據集之間的 join,但是 Spark 2.3 帶來了期待已久的流和流的 Join 操作。支持內連接和外連接,可用在大量的實時場景中。

廣告收益是流與流進行Join的典型用例。例如,展示廣告流和廣告點擊流共享您希望進行流式分析的公共關鍵字(如adId)和相關數據,根據這些數據你可以分析出哪些廣告更容易被點擊。

技術分享圖片

這個例子看起來很簡答,但是實現流和流的Join需要解決很多技術難題,如下:

需要緩存延遲的數據,直到從其他流中找到匹配的事件;
通過 watermark 機制來限制緩存區使用增長;
用戶可以在資源使用和延遲之間作出權衡;
靜態連接和流式連接之間保持一致的SQL連接語義。

Apache Spark 和 Kubernetes

Apache Spark 和 Kubernetes 結合了它們的功能來提供大規模的分布式數據處理一點都不奇怪。在 Spark 2.3 中,用戶可以利用新的 Kubernetes scheduler backend 在 Kubernetes 集群上啟動 Spark 工作。 這使得 Spark 作業可以和 Kubernetes 集群上的其他作業共享資源。

技術分享圖片

此外,Spark 可以使用所有管理功能,例如資源配額(Resource Quotas),可插拔授權(Pluggable Authorization)和日誌記錄(Logging)。

技術分享圖片

支持 PySpark 的 Pandas UDFs

Pandas UDFs 也稱為 Vectorized UDFs,是提升 PySpark 性能的主要推動力。它構建在 Apache Arrow 的基礎上,為您提供兩全其美的解決方案:低開銷和高性能的UDF,並完全使用 Python 編寫。

在 Spark 2.3 中,有兩種類型的 Pandas UDF:標量(scalar)和分組映射(grouped map)。 兩者均可在 Spark 2.3 中使用。

下面是運行的一些基準測試,可以看出 Pandas UDFs 比 row-at-time UDFs 提供更好的性能。

技術分享圖片

MLlib 提升

Spark 2.3 包含了許多 MLlib 方面的提升,主要有算法、特性、性能、擴展性以及可用性。這裏只介紹其中三方面。

首先,為了將 MLlib 模型和 Pipelines 移動到生產環境,現在擬合的模型(fitted models)和 Pipelines 可以在 Structured Streaming 作業中使用。 一些現有的管道(Pipelines)需要修改才能在流式作業中進行預測。

其次,為了實現許多 Deep Learning 圖像分析用例,Spark 2.3 引入了 ImageSchema [SPARK-21866] 用於在 Spark DataFrame中表示圖像,以及加載常見格式圖像的實用程序。

最後,對於開發人員來說,Spark 2.3 引入了改進的 Python API以編寫自定義算法。

大數據學習QQ群:716581014 專註大數據分析方法,大數據編程,大數據倉庫,大數據案例,人工智能,數據挖掘,AI等大數據內容分享交流。不定期舉辦線上線下大數據內容分享活動

Apache Spark 2.3 重要特性介紹