編者按
隨著企業內外部數據源的增加,呈現出數量龐大、種類繁多、質量參差不齊等特點。如何讓這些結構復雜、類型各異的數據發揮價值,對于大多數企業來說,最有效的途徑是建立起一套能夠統一數據源的技術體系和管理體系。
滴普科技經過技術沉淀與實踐,探索出基于Trino分析引擎連接多類數據源,實現快速查詢與分析的技術解決方案,并將此回饋給技術開發者社區。
撰文 | 曉云
編輯 | 昕然
本文共計1300字,閱讀需要3分鐘
在之前的FastData連載文章中,介紹“統一SQL引擎”時提到了Trino,本文對Trino+ Iceberg技術做相關解讀。
Trino是針對OLAP設計的用于高效的分布式查詢大量數據的分析引擎。主要具備下列優點:屏蔽底層數據源,提供統一查詢接口;基于內存計算,可以跨不同數據源完成聯邦查詢;通過Trino進行異構數據的提取、整合與分析,打破數據孤島、提高數據治理能力。
1
Trino 架構
Trino的架構如圖一所示。由一個coordinator和多個worker節點組成的Trino集群。Trino用戶通過一個客戶端連接到coordinator。coordinator與訪問數據源的worker進行協作。一旦它接收到一條SQL語句,協調器就負責跨Trino工作節點解析、分析、計劃和調度查詢執行。該語句被轉換為運行在一組worker上的一系列連接的任務。當worker處理數據時,coordinator將檢索結果并在輸出緩沖區上向客戶機公開。
在Trino中,存儲和計算分離的核心是基于connector的體系結構。connector為Trino提供了訪問任意數據源的接口。
如圖二所示,每個connector都提供了對底層數據源的基于表的抽象。只要可以使用Trino可用的數據類型以表、列和行來表示數據,就可以創建connector,查詢引擎就可以使用數據進行查詢處理。目前支持的connector包括:Hive, Iceberg, MySQL, PostgreSQL, Oracle, SQL Server, ClickHouse, MongoDB等。
Trino connector體系結構
2
Trino Iceberg connector
Iceberg 是一種用于跟蹤超大規模表的,構建于存儲格式之上的數據組織方式,通常將其作為數據湖底層存儲。它具備下列能力:
1. 模式演化:支持添加,刪除,更新或重命名,并且沒有副作用。
2. 支持隱藏分區和分區演化,方便業務進行數據分區策略更新。
3. 快照控制:可實現使用完全相同的表快照的可重復查詢,或者使用戶輕松檢查更改。
4. 版本回滾:使用戶可以通過將表重置為良好狀態來快速糾正問題。
5. 快速掃描數據:無需使用分布式SQL引擎即可讀取表或查找文件。
6. 數據修剪優化:使用表元數據使用分區和列級統計信息修剪數據文件。
7. 兼容性好:可以存儲在任意的云存儲系統和HDFS中。
8. 支持事務:上游數據寫入即可見,不影響當前數據處理任務,這大大簡化了 ETL。
9. 高并發:高并發寫入器使用樂觀并發,即使寫入沖突,也會重試以確保兼容更新成功。
圖三 Iceberg表格式
此外,Iceberg支持通過流式方式讀取增量數據;支持多種引擎,并且提供了java native API,不用特定引擎也可以訪問Iceberg表。
Trino 引入Iceberg connector的設計改進了Hive已知的可伸縮性限制。Hive將表元數據存儲在一個metastore中,該metastore由關系數據庫(如MySQL)支持。它跟蹤分區在metastore的位置,但無法定位到單獨的數據文件。使用Hive connector的Trino查詢必須首先調用metastore來獲取分區位置,然后調用底層文件系統來列出每個分區內的所有數據文件,然后從每個數據文件中讀取元數據。在文件量大的情況下,這是一個非常耗時的操作。
Iceberg提供了表級別的抽象接口,自己在文件中維護表的元數據信息(而非通過Hive Metastore維護)。基于此,Iceberg對于表的元數據管理以及表數據本身如何組織存儲進行了封裝(如圖三所示),查詢可以定位到文件級別,大幅提高了查詢效率。
此外,Trino Iceberg connector 在查詢優化方面支持分區下推,Projection 下推,動態過濾等提高查詢效率。
3
總 結
為了獲取更高的查詢性能,Trino可以將查詢或部分查詢的處理下推到連接的數據源中。這意味著特定的謂詞、聚合函數或其他操作被傳遞到底層數據庫或存儲系統進行處理;另一方面可以通過添加索引的方式,加快查詢。
責任編輯:Rex_08