Alluxio利用E-MapReduce(简称EMR)集群的本地节点的内存和磁盘对数据进行分布式缓存。本文为您介绍缓存相关的内容。

前提条件

  • 已创建集群,并选择了Alluxio服务,详情请参见创建集群
  • 已登录集群,详情请参见登录集群

背景信息

EMR默认使用双层缓存存储,即同时使用内存和磁盘进行缓存,内存默认分配了当前节点的10%,磁盘默认分配当前节点的30%。如果您需要修改当前的分配情况,可以在Alluxio服务的配置页面,搜索以 alluxio.worker.tieredstore开头的配置项并修改。 Alluxio-tieredstore

缓存详细信息,请参见Caching

缓存策略

客户端写新的数据块时,默认情况下会将其写入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 60000 milliseconds, with expiry action set to FREE