Alluxio 快取服務

概觀

為了改善 Presto 查詢延遲的常見最佳化方式是快取工作集,以避免從遠端資料來源或透過緩慢的網路進行不必要的 I/O。本節說明如何利用 Alluxio 作為 Presto 的快取層。

Alluxio 檔案系統作為獨立的分散式快取檔案系統,為 Presto Hive 連接器提供服務,其位於 HDFS 或物件儲存(如 AWS S3、GCP、Azure Blob 儲存)之上。使用者可以透過檔案系統介面了解快取使用情況並明確控制快取。例如,可以預先載入 Alluxio 目錄中的所有檔案,以預熱 Presto 查詢的快取,並設定快取資料的 TTL(存活時間)以回收快取容量。

Presto Hive 連接器可以將 AlluxioFileSystem 連線為 Hadoop 相容的檔案系統,其位於其他永久儲存系統之上。

設定

首先,設定 ${PRESTO_HOME}/etc/catalog/hive.properties 以使用 Hive 連接器。

connector.name=hive-hadoop2
hive.metastore.uri=thrift://127.0.0.1:9083

其次,確保所有 Presto 伺服器上的 ${PRESTO_HOME}/plugin/hive-hadoop2/ 中已存在 Alluxio 用戶端 jar。如果不是這種情況,請下載 Alluxio 二進位檔,將 tarball 解壓縮到 ${ALLUXIO_HOME} 並將 Alluxio 用戶端 jar ${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar 複製到此目錄中。重新啟動 Presto 服務

$ ${PRESTO_HOME}/bin/launcher restart

第三,設定 Hive Metastore 在服務 Presto 時連線到 Alluxio 檔案系統。編輯 ${HIVE_HOME}/conf/hive-env.sh 以在 Hive 類別路徑中包含 Alluxio 用戶端 jar

export HIVE_AUX_JARS_PATH=${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar

然後重新啟動 Hive Metastore

$ ${HIVE_HOME}/hcatalog/sbin/hcat_server.sh start

查詢

完成基本設定後,Presto 應該能夠存取指向 alluxio:// 位址的表格的 Alluxio 檔案系統。請參閱 Hive 連接器 文件,以了解如何在 Presto 中設定 Alluxio 檔案系統。以下是一個簡單的範例

$ cd ${ALLUXIO_HOME}
$ bin/alluxio-start.sh local -f
$ bin/alluxio fs mount --readonly /example \
   s3://apc999/presto-tutorial/example-reason/

啟動連接到上一步中啟動的伺服器的 Prest CLI。

下載 presto-cli-0.289-executable.jar,將其重新命名為 presto,並使用 chmod +x 使其可執行,然後執行它

$ ./presto --server localhost:8080 --catalog hive --debug
presto> use default;
USE

根據 Alluxio 中掛載的檔案建立新表格

presto:default> DROP TABLE IF EXISTS reason;
DROP TABLE
presto:default> CREATE TABLE reason (
  r_reason_sk integer,
  r_reason_id varchar,
  r_reason_desc varchar
) WITH (
  external_location = 'alluxio://127.0.0.1:19998/example',
  format = 'PARQUET'
);
CREATE TABLE

掃描 Alluxio 上新建立的表格

presto:default> SELECT * FROM reason LIMIT 3;
 r_reason_sk |   r_reason_id    |                r_reason_desc
-------------+------------------+---------------------------------------------
           1 | AAAAAAAABAAAAAAA | Package was damaged
           4 | AAAAAAAAEAAAAAAA | Not the product that was ordred
           5 | AAAAAAAAFAAAAAAA | Parts missing

基本操作

使用 Alluxio 檔案系統,此方法支援以下功能

  • 預先載入:除了根據資料存取模式透明地快取資料外,使用者還可以透過使用命令列(如 alluxio fs distributedLoad)主動將工作集載入 Alluxio。

  • 讀/寫類型和資料原則:使用者可以自訂 Presto 從 Alluxio 讀取和寫入時的讀取和寫入模式。例如,告知 Presto 在從特定位置讀取時跳過快取資料並避免快取抖動,或使用 alluxio fs setTtl 在指定位置的檔案上設定 TTL。

  • 檢查工作集:使用者可以驗證快取了哪些檔案,以了解和最佳化 Presto 效能。例如,使用者可以檢查 Alluxio 命令列 alluxio fs ls 的輸出,或在 Alluxio WebUI 上瀏覽對應的檔案。

  • 檢查資源使用率:系統管理員可以使用 alluxio fsadmin report 監控每個節點上已使用的快取容量,並據此規劃資源。