存储如何让文件小一点_如何在单个文件系统中存储10亿个文件?

22e1a7bfc403b5546085f35ba4787112.png

Alluxio2.0旨在能够在单个文件系统命名空间中支持10亿个文件。命名空间的扩展性对Alluxio至关重要,原因如下:

  1. Alluxio提供了可以挂载多个存储系统的单个命名空间。因此,Alluxio命名空间的大小是所有已挂载存储的大小的总和。
  2. 对象存储越来越受欢迎,与HDFS等文件系统相比,对象存储通常会容纳更多的小文件。

在Alluxio1.x中,Alluxio命名空间在实践中仅能容纳约2亿个文件。这主要是由于Alluxio master的JVM堆大小的限制,进一步扩展会导致垃圾回收问题。此外,存储2亿个文件需要占用JVM堆的大量内存空间(约200GB)。

为了在2.0版本中扩展Alluxio命名空间,我们新增了对在磁盘上的RocksDB中存储部分命名空间的支持。最近访问的元数据会存储在内存中,而较旧的元数据最终存储在磁盘上。这降低了为Alluxio命名空间提供服务的内存需求,通过减少需要处理的对象数量,减轻了Java垃圾回收器的压力。

常用链接

  • Alluxio项目官网
  • Alluxio在各大厂用例
  • 关注Alluxio微信公众号:Alluxio_China

设置堆外元数据

堆外元数据是Alluxio2.0中的默认值,因此无需任何操作即可开始使用它。如果要将所有元数据存储在内存中,设置

alluxio-site.properties

alluxio.master.metastore=HEAP# default is ROCKS for off-heap

堆外元数据的默认位置是${alluxio.work.dir}/metastore,通常位于Alluxio主目录下。你可以配置该位置,设置

alluxio-site.properties

alluxio.master.metastore.dir=/path/to/metastore
  • 内存中的元数据存储

虽然Alluxio能够将所有元数据存储在磁盘上,但由于磁盘访问速度相对于内存较慢,这会导致性能降低。为了缓解这种情况,Alluxio在内存中缓存了大量文件元数据,以便能够快速访问。当文件数量增长到接近最大缓存大小时,Alluxio会将最近使用较少的文件替换存储到磁盘上。用户可以自行权衡内存使用量和速度,设置

alluxio-site.properties

alluxio.master.metastore.inode.cache.max.size=10000000

缓存大小为1000万,需要约10GB的堆。

参数选择

  • 内存

为获得最佳性能,master的内存应该能够容纳工作集的元数据。估计工作集中的文件数,并将每个文件乘以1KB。例如,对于500万个文件,估计5GB的master内存。要配置master内存,请在conf/alluxio-env.sh中添加jvm选项alluxio-env.sh

ALLUXIO_MASTER_JAVA_OPTS+="-Xmx5G"

如果你有足够多可用内存,我们建议在生产部署中为master提供31GB的堆。

alluxio-env.sh

ALLUXIO_MASTER_JAVA_OPTS+="-Xmx31G"

更新缓存大小以匹配分配的内存量:alluxio-site.properties

# 31 million
alluxio.master.metastore.inode.cache.max.size=31000000

这适用于大多数工作负载,并且避免了切换到64位指针(一旦堆达到32GB,就需要切换到64位指针)。

  • 磁盘

Alluxio在磁盘上存储inode比在内存中存储更紧凑。每个文件不再需要1KB,而是需要约500字节。要支持在磁盘上存储10亿个文件,请提供具有500GB空间的HDD或SSD,并确保rocksdbmetastore正在使用该磁盘。

alluxio-site.properties

alluxio.master.metastore.dir=/path/to/metastore

结 论

Alluxio2.0通过利用磁盘资源实现冷元数据的存储,显著提高了元数据存储的可扩展性。这使得Alluxio能够处理更大的命名空间(随着人们将更多存储挂载到Alluxio)并更好地利用对象存储。请关注我们后续的技术博客,我们将继续会介绍利用RocksDB存储元数据的技术细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值