Alluxio

Alluxio

简介

Alluxio是一个开源的基于内存的分布式存储系统, 为计算框架和存储系统构建了桥梁,使应用程序能够通过一个公共接口连接到许多存储系统。 项目源自 UC Berkeley 的 AMPLab(见论文

image-20190515093053597

特点

  • 分布式共享缓存
  • 可插拔存储
  • 存储分层
  • 统一命名空间
  • Hadoop兼容
  • 多种回收策略
  • 支持fuse
  • 支持kv

架构

image-20190515113141895

  • master:负责监控各个Worker以及管理全局的文件系统元数据,比如文件系统树等
  • worker:负责管理本节点数据存储服务(本地的MEM、SSD和HDD)
  • client:向用户和应用提供访问接口,以及向Master和Worker发送请求
  • ufs:定期备份数据

HA

image-20190515160825686

使用场景

  • 分层存储:提供MEM-SSD-HDD 分层存储;
  • 多存储系统聚合:Alluxio支持不同的底层存储,并提供统一的接口。例如GlusterFS、(secure) HDFS、NFS、Amazon S3、AliyunOSS、OpenStack Swift、Google Cloud Storage。
  • Hadoop生态缓存加速:alluxio能和hadoop很好兼容,直接替换hdfs接口,为hadoop生态提供缓存加速功能(具体加速效果和具体业务有关);
  • 计算层需要反复访问远程(比如在云端,或跨机房)的数据;
  • 计算层需要同时访问多个独立的持久化数据源(比如同时访问S3和HDFS中的数据);
  • 多个独立的大数据应用(比如不同的Spark Job)需要高速有效的共享数据;
  • 当计算层有着较为严重的内存资源、以及JVM GC压力,或者较高的任务失败率时,Alluxio作为输入输出数据的Off heap存储可以极大缓解这一压力,并使计算消耗的时间和资源更可控可预测。

配置

  • 分层存储

$ALLUXIO_HOME/conf/alluxio-site.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
alluxio.worker.tieredstore.levels=2
alluxio.worker.tieredstore.level0.alias=MEM
alluxio.worker.tieredstore.level0.dirs.path=/mnt/ramdisk
alluxio.worker.tieredstore.level0.dirs.quota=100GB
alluxio.worker.tieredstore.level0.watermark.high.ratio=0.9
alluxio.worker.tieredstore.level0.watermark.low.ratio=0.7
alluxio.worker.tieredstore.level1.alias=HDD
alluxio.worker.tieredstore.level1.dirs.path=/mnt/hdd1,/mnt/hdd2,/mnt/hdd3
alluxio.worker.tieredstore.level1.dirs.quota=2TB,5TB,500GB
alluxio.worker.tieredstore.level1.watermark.high.ratio=0.9
alluxio.worker.tieredstore.level1.watermark.low.ratio=0.7

数据读写

  • 缓存命中
    • 本地缓存命中:一旦客户端发现访问的数据在本地存在,则会直接通过一种“短路读”的方式,直接访问本地文件系统进行访问,从而绕开TCP网络传输过程。
    • 远程缓存命中:直接读取远程节点上的缓存,同时为了以后潜在的读取访问操作,将远程缓存进行一个拷贝在发起请求的worker节点上。
  • 缓存非命中:worker会读取底层文件系统,然后加到内存里,方便下次缓存的命中。
    • Partial Caching:

  • 不持久化:直接更新到内存,可能因为机器crash导致数据丢失。
  • 持久化
    • 同步持久化
    • 异步持久化

参考

  1. https://blog.csdn.net/Androidlushangderen/article/details/81142285
updatedupdated2024-05-152024-05-15