Alluxio
简介
Alluxio是一个开源的基于内存的分布式存储系统, 为计算框架和存储系统构建了桥梁,使应用程序能够通过一个公共接口连接到许多存储系统。 项目源自 UC Berkeley 的 AMPLab(见论文)
特点
- 分布式共享缓存
- 可插拔存储
- 存储分层
- 统一命名空间
- Hadoop兼容
- 多种回收策略
- 支持fuse
- 支持kv
架构
- master:负责监控各个Worker以及管理全局的文件系统元数据,比如文件系统树等
- worker:负责管理本节点数据存储服务(本地的MEM、SSD和HDD)
- client:向用户和应用提供访问接口,以及向Master和Worker发送请求
- ufs:定期备份数据
HA
使用场景
- 分层存储:提供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
|
|
数据读写
读
- 缓存命中
- 本地缓存命中:一旦客户端发现访问的数据在本地存在,则会直接通过一种“短路读”的方式,直接访问本地文件系统进行访问,从而绕开TCP网络传输过程。
- 远程缓存命中:直接读取远程节点上的缓存,同时为了以后潜在的读取访问操作,将远程缓存进行一个拷贝在发起请求的worker节点上。
- 缓存非命中:worker会读取底层文件系统,然后加到内存里,方便下次缓存的命中。
- Partial Caching:
写
- 不持久化:直接更新到内存,可能因为机器crash导致数据丢失。
- 持久化
- 同步持久化
- 异步持久化