天天看點

由淺入深,揭秘企業級OLAP資料引擎ByteHouse

作者:位元組跳動資料平台
更多技術交流、求職機會,歡迎關注位元組跳動資料平台微信公衆号,回複【1】進入官方交流群

在位元組跳動各産品線飛速成長的過程中,對資料分析能力也提出了更高的要求,現有的主流資料分析産品都沒辦法完全滿足業務要求。是以,位元組跳動在 ClickHouse 引擎基礎上重構了技術架構,實作了雲原生環境的部署和運維管理、存儲計算分離、多租戶管理等能力,推出了雲原生資料倉庫 ByteHouse。

我們可以從下面幾個方面認識 ByteHouse:

極緻性能:

在延續了 ClickHouse 單表查詢強大性能的同時,新增了自研的查詢優化器,在多表關聯查詢和複雜查詢場景下性能提升若幹倍,實作了在各類型查詢中都達到極緻性能。

新一代 MPP 架構,存算分離:

使用新式架構,Shared-nothing 的計算層和 Shared-everything 的存儲層,可以性能損耗很小的情況下,實作存儲層與計算層的分離,獨立按需擴縮容。

資源隔離,讀寫分離:

對硬體資源進行靈活切割配置設定,按需擴縮容。資源有效隔離,讀寫分開資源管理,任務之間互不影響,杜絕了大查詢打滿所有資源拖垮叢集的現象。

豐富功能:

ByteHouse 提供客戶豐富的企業級能力,如:相容 ANSI-SQL 2011 标準、支援多租戶、庫表資産管理、基于角色的權限管理以及多樣的性能診斷工具等。

ByteHouse 架構設計

由淺入深,揭秘企業級OLAP資料引擎ByteHouse

ByteHouse 整體架構圖

雲原生資料倉庫 ByteHouse 總體架構圖如上圖所示,設計目标是實作高擴充性、高性能、高可靠性、高易用性。從下往上,總體上分服務層、計算層和存儲層。

服務層

服務層包括了所有與使用者互動的内容,包括使用者管理、身份驗證、查詢優化器,事務管理、安全管理、中繼資料管理,以及運維監控、資料查詢等可視化操作功能。

服務層主要包括如下元件:

  • 資料總管

資料總管(Resource Manager)負責對計算資源進行統一的管理和排程,能夠收集各個計算組的性能資料,為查詢、寫入和背景任務動态配置設定資源。同時支援計算資源隔離和共享,資源池化和彈性擴縮等功能。資料總管是提高叢集整體使用率的核心元件。

  • 服務節點

服務節點(CNCH Server)可以看成是 Query 執行的 master 或者是 coordinator。每一個計算組有 1 個或者多個 CNCH Server,負責接受使用者的 query 請求,解析 query,生成邏輯執行計劃,優化執行計劃,排程和執行 query,并将最終結果傳回給使用者。計算組是 Bytehouse 中的計算資源叢集,可按需進行橫向擴充。

服務節點是無狀态的,意味着使用者可以接入任意一個服務節點(當然如果有需要,也可以隔離開),并且可以水準擴充,意味着平台具備支援高并發查詢的能力。

  • 中繼資料服務

中繼資料服務(Catalog Service)提供對查詢相關中繼資料資訊的讀寫。Metadata 主要包括 2 部分:Table 的中繼資料和 Part 的中繼資料。表的中繼資料資訊主要包括表的 Schema,partitioning schema,primary key,ordering key。Part 的中繼資料資訊記錄表所對應的所有 data file 的中繼資料,主要包括檔案名,檔案路徑,partition, schema,statistics,資料的索引等資訊。

中繼資料資訊會持久化儲存在狀态存儲池裡面,為了降低對中繼資料庫的通路壓力,對于通路頻度高的中繼資料會進行緩存。

中繼資料服務自身隻負責處理對中繼資料的請求,自身是無狀态的,可以水準擴充。

  • 安全管理

權限控制和安全管理,包括入侵檢測、使用者角色管理、授權管理、通路白名單管理、安全審計等功能。

計算層

通過容器編排平台(如 Kubernetes)來實作計算資源管理,所有計算資源都放在容器中。

計算組是計算資源的組織機關,可以将計算資源按需劃分為多個虛拟叢集。每個虛拟叢集裡包含 0 到多台計算節點,可按照實際資源需求量動态的擴縮容。

計算節點主要承擔的是計算任務,這些任務可以是使用者的查詢,也可以是一些背景任務。使用者查詢和這些背景任務,可以共享相同的計算節點以提高使用率,也可以使用獨立的計算節點以保證嚴格的資源隔離。

計算組是無狀态的,可以快速水準擴充。

存儲層

采用 HDFS 或 S3 等雲存儲服務作為資料存儲層。用來存儲實際資料、索引等内容。

資料表的資料檔案存儲在遠端的統一分布式存儲系統中,與計算節點分離開來。底層存儲系統可能會對應不同類型的分布式系統。例如 HDFS,Amazon S3, Google cloud storage,Azure blob storage,阿裡雲對象存儲等等。底層存儲是天然支援高可用、容量是無限擴充的。

不同的分布式存儲系統,例如 S3 和 HDFS 有很多不同的功能和不一樣的性能,會影響到我們的設計和實作。例如 HDFS 不支援檔案的 update, S3 object move 操作時重操作需要複制資料等。

通過存儲的服務化,計算層可以支援 ByteHouse 自身的計算引擎之外,将來還可以便捷地對接其他計算引擎,例如 Presto、Spark 等。

資料導入導出

ByteHouse 包括一個資料導入導出(Data Express)子產品,負責資料的導入導出工作。

由淺入深,揭秘企業級OLAP資料引擎ByteHouse

Data Express 子產品架構圖

Data Express 為資料導入/導出作業提供工作流服務和快速配置模闆,使用者可以從提供的快速模闆建立資料加載作業。

DataExpress 利用 Spark 來執行資料遷移任務。

主要子產品:

- JobServer

- 導入模闆

- 導出模闆

JobServer 管理所有使用者建立的資料遷移作業,同時運作外部事件觸發資料遷移任務。

啟動任務時,JobServer 将相應的作業送出給 Spark 叢集,并監控其執行情況。作業執行狀态将儲存在我們的元存儲中,以供 Bytehouse 進一步分析。

ByteHouse 支援離線資料導入和實時資料導入。

離線導入

離線導入資料源:

  • Object Storage:S3、OSS、Minio
  • Hive (1.0+)
  • Apache Kafka /Confluent Cloud/AWS Kinesis
  • 本地檔案
  • RDS

離線導入适用于希望将已準備好的資料一次性加載到 ByteHouse 的場景,根據是否對目标資料表進行分區,ByteHouse 提供了不同的加載模式:

  • 全量加載:全量将用最新的資料替換全表資料。
  • 增量加載:增量加載将根據其分區将新的資料添加到現有的目标資料表。ByteHouse 将替換現有分區,而非進行合并。

支援的檔案類型

ByteHouse 的離線導入支援以下檔案格式:

  • Delimited files (CSV, TSV, etc.)
  • Json (multiline)
  • Avro
  • Parquet
  • Excel (xls)

實時導入

ByteHouse 能夠連接配接到 Kafka,并将資料持續傳輸到目标資料表中。與離線導入不同,Kafka 任務一旦啟動将持續運作。ByteHouse 的 Kafka 導入任務能夠提供 exactly-once 語義。您可以停止/恢複消費任務,ByteHouse 将記錄 offset 資訊,確定資料不會丢失。

支援的消息格式

ByteHouse 在流式導入中支援以下消息格式:

  • Protobuf
  • JSON

總結

雲原生資料倉庫 ByteHouse 是一個具備極緻性能、能夠存儲和計算資源分别按需擴縮容、功能豐富的資料分析産品,是一個面向海量資料、高實時要求的一個企業級 OLAP 資料引擎。

ByteHouse 在位元組跳動的衆多場景中有着豐富的經驗積累,尤其是在實時資料分析場景和海量資料靈活查詢場景,都有超大規模的應用。ByteHouse 基于自研技術優勢和超大規模的使用經驗,為企業大資料團隊帶來新的選擇和支援,以應對複雜多變的業務需求,高速增長的資料場景。目前,ByteHouse 已在火山引擎上提供免費試用,歡迎大家來嘗試,并為我們提出寶貴建議。

點選跳轉 ByteDance Cloud | ByteHouse 了解更多

繼續閱讀