Alluxio利用E-MapReduce(簡稱EMR)集群的本地節點的內存和磁盤對數據進行分布式緩存。本文為您介紹緩存相關的內容。

前提條件

  • 已創建集群,并選擇了Alluxio服務,詳情請參見創建集群
  • 已登錄集群,詳情請參見登錄集群

背景信息

EMR默認使用雙層緩存存儲,即同時使用內存和磁盤進行緩存,內存默認分配了當前節點的10%,磁盤默認分配當前節點的30%。如果您需要修改當前的分配情況,可以在Alluxio服務的配置頁面,搜索以alluxio.worker.tieredstore開頭的配置項并修改。Alluxio-tieredstore

緩存詳細信息,請參見緩存。

緩存策略

客戶端寫新的數據塊時,默認情況下會將其寫入level0層存儲。如果level0沒有足夠的可用空間, 則會嘗試下一層存儲。如果在所有層上均未找到存儲空間,Alluxio會釋放空間來存儲新寫入的數據塊。默認的釋放策略是LRUAnnotator,按照最近最少使用的順序釋放數據塊。

客戶端讀取數據塊時,如果數據已經存在于Alluxio中,則客戶端將直接讀取對應Worker節點;如果Alluxio中不存在數據,則會先緩存數據至Alluxio中,以便下次從Worker節點讀取。

管理數據生命周期

數據生命周期管理常見命令如下表所示。

命令 功能
free

釋放緩存中的數據。

load

加載數據到Alluxio緩存中。

persist

將Alluxio中的文件或目錄持久化到底層文件系統中。

setTtl

設置文件或目錄的生存時間(TTL),單位為毫秒。

free

釋放緩存中的數據。

釋放數據是指從Alluxio緩存中刪除數據,而不是從底層UFS中刪除數據。釋放操作后,數據仍然可供用戶使用,但對Alluxio釋放文件后嘗試訪問該文件的客戶端來講性能可能會降低。

  • 語法
    alluxio fs free <path>
  • 示例:將tmp目錄中的所有數據從緩存中釋放。
    alluxio fs free /tmp
    返回如下信息。
    /tmp was successfully freed from Alluxio space.

load

加載數據到Alluxio緩存中。

  • 語法
    alluxio fs load <path>
  • 示例:加載/tmp3/logs目錄中的所有數據到Alluxio緩存中。
    alluxio fs load /tmp3/logs
    返回如下信息。
    /tmp3/logs loaded

persist

將Alluxio中的文件或目錄持久化到底層文件系統中。

持久化數據是指將Alluxio存儲中可能被修改過或未被修改過的數據寫回UFS。 通過將數據寫回到UFS,可以保證如果Alluxio發生故障數據還是可恢復的。

  • 語法
    alluxio fs persist <path>
  • 示例:將Alluxio中tmp目錄持久化到底層文件系統中。
    alluxio fs persist /tmp
    返回如下信息。
    persisted file /tmp with size 46

setTtl

設置文件或目錄的生存時間(TTL),單位為毫秒。

如果當前時間大于該文件的創建時間與TTL時間之和時,行動參數將指示要執行的操作。delete操作(默認)將同時刪除Alluxio和底層文件系統中的文件,而free操作僅僅刪除Alluxio中的文件。

  • 語法
    alluxio fs setTtl [--action delete|free] <path> <time to live>
  • 示例:
    • 一分鐘后,tmp目錄將被刪除。
      alluxio fs setTtl /tmp 60000
      返回如下信息。
      TTL of path '/tmp' was successfully set to 60000 milliseconds, with expiry action set to DELETE
    • 一天后,dir目錄緩存將被驅逐。
      alluxio fs setTtl --action free /dir 86400000
      返回如下信息。
      TTL of path '/dir' was successfully set to 86400000 milliseconds, with expiry action set to FREE