Alluxio利用E-MapReduce(簡稱EMR)集群的本地節點的內存和磁盤對數據進行分布式緩存。本文為您介紹緩存相關的內容。
背景信息
緩存詳細信息,請參見緩存。
緩存策略
客戶端寫新的數據塊時,默認情況下會將其寫入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
- 一分鐘后,tmp目錄將被刪除。