Alluxio为Spark或Presto等应用程序提供分布式数据访问层,以通过统一文件系统命名空间中的单一API访问不同的底层文件系统(或UFS)。如果用户只通过Alluxio与UFS中的文件进行交互,由于Alluxio保存了客户端对UFS所做的任何更改,因此它将Alluxio命名空间与UFS命名空间保持同步(参见下图)

但是,如果在不通过Alluxio的情况下更改UFS中的文件,则UFS命名空间和Alluxio命名空间可能会不同步。发生这种情况时,需要UFS元数据同步操作来同步两个命名空间(如右图所示)。

保证HDFS可靠性的八个策略_缓存

在Alluxio 2.0中,有两种方法可以使Alluxio和UFS之间的元数据保持同步。

按需同步

Alluxio自动缓存来自UFS的元数据信息,使后续的元数据操作(如listStatus(或ls))不需要访问UFS。这一技术减少了部分元数据操作的延迟。 但是,有时候底层UFS的元数据可能会在绕过Alluxio的情况下发生变化。此时,Alluxio需要使此缓存失效。从版本1.7.0开始,Alluxio提供了一个选项alluxio.user.file.metadata.sync.interval,允许用户控制元数据缓存刷新的频率。只要客户端发出元数据操作(例如listStatus),它就可以将间隔指定为-1,0或固定时间值。当它设置为-1时,Alluxio永远不会从UFS获取元数据信息。当它设置为0时,它总是从UFS获取元数据信息。当它被设置为固定时间值时,如果在过去该时间段内Alluxio没有执行该操作,它将从UFS获取元数据信息。

下面是操作示例

$ alluxio fs ls -R -Dalluxio.user.file.metadata.sync.interval=0 /dir

该操作设置alluxio总是从UFS获取元数据信息。

需要注意的一点是,除非有对该UFS的客户端请求,否则Alluxio系统永远不会与UFS同步。这可能会导致部分问题,因为特定客户端第一次访问UFS时,访问UFS的额外成本会导致客户端请求减慢。因此,Alluxio需要一种在后台同步Alluxio命名空间和UFS命名空间,或者同步Active UFS的新机制。

主动同步

Alluxio 2.0预览版支持新功能“Active UFS Sync”。它允许用户以有规律的间隔指定要在Alluxio命名空间和UFS命名空间之间同步的目录,并使用多个参数来微调该同步行为。目前,仅在Alluxio和HDFS 2.7或更高版本之间支持Active UFS Sync。要使用此功能,运行Alluxio的用户必须是HDFS管理员用户,才能监听HDFS提供的事件流。

要在目录上启用主动同步,请在以HDFS为备份的目录上运行以下Alluxio命令。

$ alluxio fs startSync /syncedDir

您还可以使用以下命令停止目录上的活动同步。

$ alluxio fs stopSync /syncedDir

请注意,在Master重启之间会记住活动同步下的目录列表。您可以使用getSyncPathList命令检查哪些目录处于活动同步状态。

$ alluxio fs getSyncPathList
$ alluxio fs getSyncPathList

优 化

有一些参数可以优化活动UFS同步行为。

同步间隔:用户可以通过更改alluxio.master.activesync.interval选项来控制活动同步间隔,默认值为30秒。

安静时段:当要同步的目录受到大量修改,并与UFS进行大量RPC通信,为了避免在上述情况下进行同步,主动UFS同步尝试仅在UFS被认为处于安静时段时进行同步。

安静时段由alluxio.master.activesync.maxactivity控制。Activity是一种基于目录中多个事件的指数移动平均值的启发式算法。例如,如果目录在过去三个时间间隔内有100,10,1事件,则它的活动值将是100/10 * 10 + 10/10 + 1 = 3。属性alluxio.master.activesync.maxactivity是UFS目录中被视为“安静”的最大活动数。但是,如果我们只在安静时间段内同步,我们可能需要等待很长时间,并且元数据可能会在Alluxio命名空间中变得陈旧。属性alluxio.master.activesync.maxage是在同步UFS和Alluxio空间之前我们将等待的最大间隔数。如果它是“安静”的,或者它已经很长时间(一个长于最大年龄的时间段)没有同步,系统保证我们将开始同步目录。

结 论

使用Alluxio时,保持Alluxio命名空间和UFS命名空间一致非常重要。本文介绍了执行此同步的两种方法。客户端调用Alluxio(按需)或在后台(Active UFS Sync)发生同步,每个都有自己独特的优势。按需UFS元数据同步仅在客户端调用Alluxio时发生,因此它允许管理员精确控制何时发生同步。活动UFS同步在后台进行,因此需要最少的配置和管理。管理员可以根据具体用例选择正确的策略。