Alluxio SDK 快取

概觀

Presto 支援使用內建的 Alluxio SDK 快取來快取輸入資料,以減少使用 Hive 連接器的查詢延遲。此內建快取利用每個工作節點上的本機儲存空間(例如 SSD),並具有可設定的容量和位置。若要了解其內部結構和延遲改善的基準測試結果,請閱讀這篇文章。請注意,這是讀取快取,對使用者而言是完全透明的,並且完全由個別 Presto 工作節點管理。若要為 Presto 提供獨立的分散式快取服務,以處理具有自訂資料快取原則的讀寫工作負載,請參閱Alluxio 快取服務

設定

啟用 Alluxio SDK 快取非常簡單。在 etc/catalog/hive.properties 中包含以下組態,並重新啟動 Presto 協調器和工作節點

hive.node-selection-strategy=SOFT_AFFINITY
cache.enabled=true
cache.type=ALLUXIO
cache.alluxio.max-cache-size=500GB
cache.base-directory=/tmp/alluxio-cache

在上述範例組態中,

  • hive.node-selection-strategy=SOFT_AFFINITY 指示 Presto 排程器在將任務排程至工作節點時,將資料親和性納入考量,以實現有意義的資料快取效果。此組態屬性預設為 NO_PREFERENCE,並且僅在設定為 SOFT_AFFINITY 時才會啟用 SDK 快取。協調器上其他可能會影響資料親和性的組態包括 node-scheduler.max-pending-splits-per-task(每個任務的最大待處理分割數)和 node-scheduler.max-splits-per-node(每個節點的最大分割數)。

  • cache.enabled=true 會開啟 SDK 快取,而 cache.type=ALLUXIO 則會將其設定為 Alluxio。

  • cache.alluxio.max-cache-size=500GB 將儲存空間設定為 500GB。

  • cache.base-directory=/tmp/alluxio-cache 指定本機目錄 /tmp/alluxio-cache。請注意,此 Presto 伺服器必須具有讀取和寫入權限才能存取此本機目錄。

啟用親和性排程時,會將一組偏好的節點指派給某個檔案區段。預設檔案區段大小為 256MB。例如,如果檔案大小為 512MB,則會指派兩種不同的親和性偏好設定

  • [0MB..256MB] -> NodeA, NodeB

  • [256MB+1B..512MB] -> NodeC, NodeD

該區段是根據分割起始偏移量來選取的。其第一個位元組位於第一個區段中的分割,偏好排程在 NodeANodeB 上。

您可以透過設定 hive.affinity-scheduling-file-section-size 組態屬性或 affinity_scheduling_file_section_size 工作階段屬性來變更區段的大小。

監控

此 Alluxio SDK 快取對使用者而言是完全透明的。若要驗證快取是否正常運作,您可以檢查 cache.base-directory 所設定的目錄,並查看其中是否建立了暫存檔案。此外,Alluxio 在執行與快取相關的操作時,會匯出各種 JMX 指標。系統管理員可以透過檢查下列指標來監控整個叢集的快取使用情況

  • Client.CacheBytesEvicted:從用戶端快取中逐出的位元組總數。

  • Client.CacheBytesReadCache:從用戶端快取讀取的位元組總數(例如,快取命中)。

  • Client.CacheBytesRequestedExternal:使用者要求讀取的位元組總數,導致快取未命中。由於區塊讀取,此數字可能會小於 Client.CacheBytesReadExternal。

  • Client.CacheHitRate:依據(從快取讀取的位元組數)/(要求的位元組數)所測量的命中率。

  • Client.CacheSpaceAvailable:用戶端快取中可用的位元組數量。

  • Client.CacheSpaceUsed:用戶端快取使用的位元組數量。

如需可用指標的完整清單,請參閱 Alluxio 用戶端指標