Alluxio数据挂载与一致性
统一数据命名空间
Alluxio支持HDFS、NFS、Ceph、Amazon S3、Google Cloud等多种底层存储系统,提供统一数据命名空间。根挂载点在配置文件中定义,嵌套挂载点可通过指令动态挂载。
策略化数据管理
Alluxio支持策略化数据管理(PDDM),允许同一路径挂载多个底层存储,通过配置读/写策略和迁移策略实现数据优化。例如,将超过7天的数据从HDFS迁移至S3以节约资源。
与底层存储的一致性
写文件流程
Alluxio支持四种写模式:
- MUST_CACHE:仅写入Alluxio缓存,不写UFS,元数据和数据均不一致。
- THROUGH:通过Alluxio写入UFS,元数据和数据一致。
- CACHE_THROUGH:同时写入UFS和缓存,元数据和数据一致。
- ASYNC_THROUGH:先写缓存再异步写UFS,元数据和数据一致,但领先UFS。
读文件流程
- 冷读:从UFS读取元数据和数据并缓存。
- 热读:从Alluxio缓存中读取元数据和数据。
元数据/数据同步
一致性需求
- 写数据时,若UFS文件已存在则写失败。
- 读数据时,若UFS文件已更新需更新缓存。
同步机制
- 基于元数据时间戳:通过
alluxio.user.file.metadata.sync.interval配置同步频率。
-1:永不同步。
0:每次访问同步。
>0:按时间间隔同步。
- 基于UFS消息(Active Sync):需Alluxio 2.X + Hadoop >2.6.1,基于HDFS inotify机制,从NameNode读取文件变化并同步。
性能优化
- 缓存结果:缓存不存在的路径和最近读取的UFS文件信息。
- 锁优化:Alluxio >= 2.3采用BFS和读锁升级,提高并发度。
- 调整并行度:通过
alluxio.master.metadata.sync.*参数控制同步并行度。
场景推荐配置
- 场景1:文件全部由Alluxio写入并读取,无需元数据同步。
- 场景2:
- HDFS:更新频繁或NameNode压力大时使用基于时间的被动同步,反之使用Active Sync。
- Non-HDFS:使用基于时间的被动同步。
- 场景3:
- HDFS:文件时效性重要使用Active Sync,否则使用被动同步。
- Non-HDFS:使用基于时间的被动同步。