Alluxio元数据问题浅析

Alluxio缓存的是底层文件系统(UFS)的数据,如果UFS上的数据发生变动,或外部客户端对Alluxio缓存的数据进行了写入,都会发生元数据不一致的情况。例如,下图中的报错。

同时,在Alluxio的master上,master.log可看到如下报错:

也有可能元数据问题导致的其他报错,目前笔者遇到的仅此一种情况。Alluxio官方对于元数据问题也给出了解决方案,有如下两种处理方法:

1.ls命令

alluxio fs ls /path/to/file

2.checkConsistency

alluxio fs checkConsistency -r /path/to/file 

后者执行之后会显示如下信息,表示刷新成功。

但仍有两个命令均显示执行正常,元数据报错依然存在的情况,此时需要执行以下命令,将Alluxio上缓存的数据删除:

alluxio fs rm -R --alluxioOnly /path/to/file

然后再进行元数据刷新,可恢复元数据的一致。

Alluxio官方也对Alluxio与UFS同步元数据的机制进行了一定的介绍。根据官方的描述,在正常情况下,对底层文件的修改是通过Alluxio提供的API来实现的,此时Alluxio有一套内部的机制用来与UFS保持同步;当没有通过Alluxio对UFS进行修改时,就会出现源数据不一致的情况,如下图所示。

Alluxio内部有一个用来缓存元数据的cache,如ls这种需要访问元数据的命令是不需要访问UFS的,而是直接访问用来存储元数据的cache。在Alluxio 1.7.0之后的版本,Alluxio提供了一个用来自动同步UFS元数据的参数:

alluxio.user.file.metadata.sync.interval

可选值包括-1、0以及其他正整数,当取值-1时,表示不会从UFS获取元数据;取0时,将总是从UFS获取元数据;取其他整数时(如5),表示将在发生ls操作之后的5秒进行元数据同步(如果这5秒期间没有进行过元数据同步操作的话)。此参数也可以给单独的某个目录进行配置:

alluxio fs ls -R -Dalluxio.user.file.metadata.sync.interval=5 /path/to/data

执行此命令后表示/path/to/data目录及其子目录的元数据将保持在执行ls的5秒后与UFS更新。但在实际生产环境中,我们需要更为自主智能的元数据同步方式,在Alluxio 2.0及以后的版本,Alluxio支持了另一种数据同步操作(需要HDFS 2.7及以上版本):

alluxio fs startSync /path/to/data

执行此命令后,Alluxio将监听HDFS上的消息,涉及/path/to/data的操作均会同步到Alluxio中,即自动同步元数据。可以通过以下命令来查看Alluxio正在监听的目录列表:

alluxio fs getSyncPathList

当不需要同步元数据时,可执行以下命令解除监听:

alluxio fs stopSync /path/to/data

对于自动同步功能,Alluxio还提供了一些用于额外的配置项:
1.alluxio.master.activesync.interval
此配置项默认值为30,表示每30秒同步一次元数据,也可自行设定为其他值;
2.alluxio.master.activesync.maxactivity
如果目前对同步目录进行了较大的修改操作,为了不增加UFS的工作负载,Alluxio会在同步目录相对不那么忙碌的期间进行元数据同步。此配置项表示HDFS的修改事件数目的指数移动平均值最大达到多大时停止元数据同步。举例来说,如果在3个间隔内,每个间隔的HDFS事件数分别为100、10、1,则这期间的HDFS事件指数移动平均值为3,如果配置项的值小于3,则会停止元数据自动同步。在实际使用场景中,应预先考虑到可能的HDFS操作,如每日定时任务等,并根据实际情况设定。
3.alluxio.master.activesync.maxage
为防止alluxio.master.activesync.maxactivity配置项导致很长时间内都没有元数据自动同步,可增加此配置项来进行限制。假如设定为5,那么在maxactivity配置项的基础上,当跳过了5个同步间隔时,强行进行元数据同步,防止Alluxio与UFS的元数据出现不一致。

参考文档:
1.https://www.alluxio.io/blog/two-ways-to-keep-files-in-sync-between-alluxio-and-hdfs/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值