宣布Photon公開預覽:Databricks Lakehouse平台上的下一代查詢引擎Beplay体育安卓版本
2021年6月17日 在Beplay体育安卓版本平台的博客
今天,我們很高興地宣布光子公開預覽。Photon是用c++開發的原生向量化引擎,用於顯著提高查詢性能。所有你要做的就是從Photon中受益。Photon將無縫地協調工作和資源,透明地加速SQL和Spark查詢的部分。不需要調優或用戶幹預。
雖然新引擎被設計為最終加速所有工作負載,但在預覽期間,Photon專注於更快地運行SQL工作負載,同時降低每個工作負載的總成本。有兩種方式你可以從Photon受益:
- 作為默認的查詢引擎磚的SQL無需額外費用
- 作為新高性能的一部分運行時在Databricks集群,其中以不同的速率消耗DBUs而不是運行在非photon運行時的相同實例類型。
在這篇博客中,我們將討論構建Photon的動機,解釋Photon的工作原理,以及如何從Databricks SQL和Databricks Data Science & Data Engineering上的傳統集群中監控Photon中的查詢執行。
使用Photon更快
有人可能會問,為什麼要構建一個新的查詢引擎?有人說一幅柱狀圖勝過千言萬語,所以讓我們用數據來講述故事吧。
從這張使用TPC-DS基準測試(比例因子1TB)的Databricks運行時性能圖表中可以看到,這些年來性能穩步提高。然而,隨著Photon的引入,我們看到了查詢性能的巨大飛躍——Photon比Databricks Runtime 8.0快了2倍。這就是為什麼我們對Photon的潛力感到非常興奮,我們才剛剛開始——Photon路線圖包含了更大的覆蓋範圍和更多優化的計劃。
早期的私人預覽客戶已經觀察到使用Photonbeplay体育app下载地址在SQL工作負載上的平均提速2-4倍,例如:
- 基於sql的工作—加速SQL和Spark dataframe的大規模生產作業。
- 物聯網用例-與Spark和傳統的Databricks Runtime相比,使用Photon進行更快的時間序列分析。
- 數據隱私和遵從性-使用Delta Lake,生產作業和Photon查詢pb級數據集,識別和刪除記錄,而不重複數據。
- 將數據加載到Delta和Parquet中- Photon的向量化I/O加速了Delta和Parquet表的數據加載,降低了數據工程作業的總體運行時間和成本。
光子的工作原理
雖然Photon是用c++編寫的,但它直接集成在Databricks Runtime和Spark中。這意味著使用Photon不需要修改代碼。讓我帶你快速了解一個“查詢的生命周期”,以幫助你理解Photon的插入位置。
當客戶端向Spark驅動程序提交給定的查詢或命令時,該查詢或命令將被解析催化劑優化器做分析,計劃和優化,就像它會沒有光子涉及。唯一不同的是,在Photon中,運行時引擎會傳遞物理計劃,並決定哪些部分可以在Photon中運行。Photon的計劃可能會做一些小的修改,例如,將排序合並連接更改為散列連接,但計劃的整體結構,包括連接順序,將保持不變。由於Photon還不支持Spark的所有功能,單個查詢可以部分在Photon中運行,部分在Spark中運行。這種混合執行模型對用戶是完全透明的。
然後,查詢計劃被分解為分布式執行的原子單元,稱為任務,這些任務在工作節點上的線程中運行,這些線程對數據的特定分區進行操作。光子引擎就是在這個層次上工作的。你可以把它想象成用原生引擎實現取代Spark的整個階段代碼原。Photon庫加載到JVM中,Spark和Photon通過JNI,將數據指針傳遞到堆外內存。Photon還集成了Spark的內存管理器,用於在混合計劃中協調溢出。Spark和Photon都被配置為使用堆外內存並在內存壓力下進行協調。
隨著公開預覽版的發布,Photon支持許多(但不是全部)數據類型、操作符和表達式。請參閱光子概述詳見文檔。
光子執行分析
考慮到目前並不是所有的工作負載和操作符都被支持,你可能想知道如何選擇可以從Photon中受益的工作負載,以及如何在執行計劃中檢測Photon的存在。簡而言之,Photon執行是自底向上的——它從表掃描操作符開始,並繼續向上DAG(有向無環圖),直到它遇到一個不受支持的操作。在這一點上,執行離開Photon,其餘的操作將在沒有Photon的情況下運行。
- 如果你在Databricks SQL上使用Photon,很容易看到使用Photon運行了多少查詢:
- 單擊查詢曆史側欄上的圖標。
- 單擊包含要分析的查詢的行。
- 在彈出的“查詢詳細信息”窗口中,單擊執行細節.
- 看看Photon中的任務時間度量在底部。
一般來說,Task Time在Photon中的百分比越大,Photon的性能收益就越大。
如果你在Databricks集群上使用Photon,你可以在Spark UI中查看Photon動作。下麵的截圖顯示了查詢細節DAG。在DAG中有兩個光子的跡象。首先,Photon操作符以Photon開頭,例如PhotonGroupingAgg。其次,在DAG中,Photon操作符和階段是桃紅色的,而非Photon操作符和階段是藍色的。
從紐約市出租車數據的工作示例開始
如上所述,有兩種方法可以使用Photon:
- Photon是默認為所有Databricks SQL端點。隻是提供SQL端點,並運行您的查詢並使用上麵介紹的方法來確定Photon對性能的影響。
- 要在Databricks集群上運行Photon(僅在公開預覽期間使用AWS),當準備一個新的集群時,選擇一個Photon運行時.新的Photon實例類型以不同於相同的速率消耗DBUs實例類型運行非photon運行時。有關Photon實例和DBU消耗的詳細信息,請參閱AWS的數據定價頁麵.
創建了啟用photon的SQL端點或集群後,可以嚐試對NYC Taxi數據集從Databricks SQL編輯器或筆記本。我們已經預裝了一段摘錄,並將其作為我們的一部分磚的數據集.
首先,用下麵的SQL代碼段創建一個指向現有數據的新表:
創建如果數據庫不存在photon_demo;創建表格photon_demo.nyctaxi_yellowcab_table使用δ選項(路徑“/ databricks-datasets / nyctaxi /表/ nyctaxi_yellow /”);
嚐試這個查詢,享受光子的速度!
選擇vendor_id,總和(trip_distance)作為SumTripDistance,AVG(trip_distance)作為AvgTripDistance從photon_demo.nyctaxi_yellowcab_table在哪裏passenger_count在(1,2,4)集團通過vendor_id訂單通過vendor_id;
我們使用Photon和常規Databricks Runtime在預熱的AWS集群上測量了上述查詢的響應時間,該集群有2個i3.2xlarge執行器和一個i3.2xlarge驅動程序。以下是結果。
如果你想了解更多關於Photon的知識,你也可以觀看我們的數據和AI峰會:根本性的速度SQL查詢光子在引擎蓋下.感謝您的閱讀,我們期待您的反饋!