關於如何將SQL引擎與Hive數據倉庫分離——你想知道的一切

您是否在使用SQL引擎(如Presto)查詢現有的Hive數據倉庫的過程中遇到一些挑戰,例如Hive Metastore負載過高導致訪問速度變慢且難以預測,數據格式和分佈未經過優化(例如過多的小文件)或對現有Hive系統和其他Hive應用程序缺乏影響力?

為了應對這些挑戰,我們在2.1開源版本中上線了Alluxio結構化數據管理功能(見參考鏈接1),其中包括Alluxio目錄服務(見參考鏈接1)。在前期在線交流時間(office hour),Alluxio目錄服務的項目負責人Gene Pang總結了項目的主要挑戰,並演示了的Alluxio目錄服務的功能(觀看完整視頻,請參考鏈接2)。

以下是社區中熱門問題的問答總結:

Alluxio 目錄服務如何與Hive Metastore協同運作?

Alluxio目錄負責管理結構化數據的元數據,如模式和表的信息。為了實現元數據管理功能,Alluxio目錄利用底層數據庫(Under Database,UDB)抽象來管理與外部元數據服務(如Hive Metastore或AWS Glue)的連接。通過UDB抽象,Alluxio目錄可以與外部元數據服務進行交互以獲取數據庫和表的信息。

為了使Alluxio目錄能夠管理和維護與外部元數據服務的交互,外部服務必須“關聯(attach)”到Alluxio目錄。這個關聯過程會在外部元數據服務和Alluxio目錄之間建立聯繫。用戶可以通過輸入命令行指令“attachdb”(見參考鏈接3)啟動外部元數據服務的關聯程序。

在Alluxio 2.2版本中,我們實現了針對Hive Metastore的UDB。這意味著Hive Metastore中的數據庫能夠被關聯到Alluxio目錄,於是Alluxio目錄可以管理和提供相應的元數據。在未來的Alluxio版本中,我們將添加對AWS Glue UDB的支持。


關聯外部數據庫後,Alluxio目錄將同步所有來自外部數據庫的信息,並將表的定義信息導入目錄當中。然後,Alluxio目錄就可以提供信息給客戶端,例如Presto中的Alluxio連接器。用戶可以通過輸入命令行指令“sync”(見參考鏈接4)觸發Alluxio目錄與UDB的再次同步。

關聯UDB後,Alluxio目錄將負責管理表的元數據。這意味著Alluxio目錄將透明地使用Alluxio文件位置,而不是在Hive Metastore中找到的位置,所以無需對Hive Metastore進行修改。這種特性使得在現有的Hive Metastore環境下部署Alluxio目錄服務變得簡單。

Alluxio目錄服務如何與Presto協同運作?

Presto是通過Alluxio連接器與Alluxio目錄進行交互。Presto中的Alluxio連接器是現有Hive連接器的新功能,而且已經合併到PrestoSQL和PrestoDB的代碼庫中。Presto目錄只需配置能夠與Alluxio目錄進行交互(見參考鏈接5)即可,無需與Hive Metastore 進行交互。按照這種方式配置Presto之後,所有Hive連接器操作都將與Alluxio目錄交互以獲取表的元數據,而不是Hive Metastore。

在Alluxio 2.2版本中,Alluxio連接器和Alluxio目錄僅支持只讀查詢。在未來的版本中,Alluxio將支持諸如DDL和DML語句之類的寫查詢。

Alluxio如何執行數據轉換(transformation)?

Alluxio數據轉換(見參考鏈接6)是由Alluxio內部作業服務(見參考鏈接7)執行,該服務負責執行分佈式異步作業。啟動數據轉換後,Alluxio會將數據轉換轉變為分佈式作業,並交由各個Alluxio作業工作節點執行。作業完成後,Alluxio會將轉換後數據的最新位置更新到Alluxio目錄,並且當Alluxio目錄提供表的元數據服務時,數據轉換後最新的位置會被透明地使用,而無需對UDB進行任何修改。

數據轉換生成的數據將被寫入底層持久存儲中,而不是緩存在Alluxio中。一旦轉換後的數據寫入完成,用戶就可以從轉換後的最新位置讀取它。首次讀取轉換後的數據將根據需要在Alluxio中緩存相應數據。

在Alluxio 2.2中,輸出文件格式為parquet格式,因為它是一種更有利於計算優化的文件格式。在未來的版本中,Alluxio將支持其他文件格式和parquet輸出選項。為了將許多小文件合併在一起,Alluxio默認生成大小約2G的文件,但這是可配置的。

Alluxio結構化數據服務的體系結構是什麼?

Alluxio結構化數據服務是Alluxio系統的一部分,包含3個主要組件:Presto中的Alluxio連接器,Alluxio目錄服務和Alluxio數據轉換服務。

Alluxio連接器:Alluxio連接器是Presto SQL引擎的一部分。它是基於現有Hive連接器實現的,是面向Alluxio目錄的客戶端。

Alluxio目錄服務:目錄服務管理結構化數據的元數據,並且是Alluxio主進程的一部分。

Alluxio數據轉換服務:數據轉換服務由Alluxio目錄負責管理並由Alluxio作業服務負責執行,該作業服務是Alluxio內部用於執行分佈式異步任務的服務。數據轉換的作業將由Alluxio作業主節點Alluxio工作節點負責管理和執行。

參考鏈接:

鏈接1:

https://docs.alluxio.io/os/user/stable/en/core-services/Catalog.html

鏈接2:

https://www.alluxio.io/resources/videos/optimizing-query-performance-by-decoupling-presto-and-hive-data-warehouse/

鏈接3:

https://docs.alluxio.io/os/user/stable/en/operation/User-CLI.html#attachdb

鏈接4:

https://docs.alluxio.io/os/user/stable/en/operation/User-CLI.html#sync

鏈接5:

https://docs.alluxio.io/os/user/stable/en/core-services/Catalog.html#enabling-the-alluxio-catalog-service-with-presto

鏈接6:

https://docs.alluxio.io/os/user/stable/en/core-services/Transformation.html

鏈接7:

https://docs.alluxio.io/os/user/stable/en/overview/Architecture.html#job-masters


分享到:


相關文章: