分布式文件系统的新兴力量:揭秘Alluxio的元数据管理机制【文末送书】

news2024/10/5 22:13:51

文章目录

  • 写在前面
  • 01 分布式文件系统元数据的常见类型
    • 1.1 文件(inode)元数据
    • 1.2 数据块(block)元数据
    • 1.3 Worker元数据
  • 02 分布式文件系统元数据的存储模式
    • 2.1 元数据存储在堆上(HEAP模式)
    • 2.2 元数据存储在堆外(ROCKS模式)
    • 2.3 堆外存储的内存和磁盘占用
    • 2.4 对堆外存储的缓存加速和调优
    • 2.5 在HEAP和ROCKS模式间切换
  • 写作末尾

写在前面

当今,我们的世界已经进入一个数据时代。随着互联网、物联网、5G、大数据、人工智能、自动驾驶、元宇宙等信息技术的快速发展,人们在产生、收集、存储、治理和分析的数据的总量呈快速增长的趋势。形态多样、格式复杂、规模庞大、产生迅速的行业领域大规模数据驱动了底层新型基础支撑计算支撑技术的快速变革。通过过去10多年来工业界和学术界先行者的指引和实践,分布式并行计算和分布式数据存储的技术生态不断演进、丰富繁荣。其中,分布式数据存储管理在这个海量数据处理技术栈中处于基础地位,是众多行业大数据应用分析的基石。

分布式文件系统是从高性能计算到大数据计算时代一直广为应用的主流分布式数据存储管理系统。近些年随着云计算技术的持续发展,分布式对象存储存储、键值存储等技术的应用也开始大行其道。在这个背景下,很多分布式文件系统开始走上对数据存储进行统一高效管理的技术路线。其中,被用户知晓和普遍应该的一款系统是诞生于加州大学伯克利分校的AMPLab的Alluxio,它可以被看作一种统一化大数据虚拟文件系统,不同种类的分布式存储系统(文件系统、对象存储系统)都可以挂载到Alluxio目录中,对提供提供高效统一的访问模式和接口。元数据是一个存储系统中关于数据信息最为重要、正常访问最为频繁的一类关键信息。为了有效地管理来自底层不同分布式存储系统的大规模数据文件和对象,Alluxio需要提供一种高效可扩展的大规模元数据管理机制。

本文以开源版本的Alluxio 2.8为例,揭秘分布式文件系统中常见的大规模元数据管理机制。对Alluxio用户而言,用户通过文件元信息和Alluxio文件系统接口进行互动,通过数据块元信息来读写数据和缓存。文件和数据块元信息由Alluxio Master统一存储和管理。

01 分布式文件系统元数据的常见类型

Alluxio Master管理的元数据中,最重要的是文件元数据、数据块元数据、挂载点元数据和Alluxio Worker元数据几类。

1.1 文件(inode)元数据

Alluxio文件系统中的每一个文件或文件夹都由一个inode代表,这个inode存储着这个文件所有的属性和元信息,包括文件基本属性、权限信息、管理属性、时间戳、包含的数据块及每一个数据块的元数据等。“inode”这一概念来源于Unix类型的文件系统,在Linux和HDFS等文件系统中被广泛使用,一个inode代表着文件系统目录树上的一个节点。因为Alluxio管理着多个底层存储,所以Alluxio命名空间中的潜在文件数量实际上是所有底层存储中文件的总和。元数据服务作为Alluxio集群中最重要的服务,直接决定了系统的规模、性能和稳定性。值得一提的是,Alluxio文件系统中的inode不一定在底层存储中存在。例如,如果这个路径是用MUST_CACHE方式写入Alluxio,那么Alluxio并不会在底层存储中创建这个文件。此外,如果底层存储是一个对象存储,因为对象存储没有文件夹的概念,所以Alluxio中的文件夹并不会在底层存储中对应实际存在的对象。

总体来说,Alluxio Master对inode的管理可以抽象地分为以下几类:

  • 使用一个InodeTree存储所有的inode信息及inode之间的树状结构(文件夹和文件之间的父子关系),Alluxio Master维护着文件系统的树状结构。

  • 实现文件系统操作的接口并支持所有对文件的操作。Alluxio Master开放了一系列文件系统操作接口,并且对每一个操作提供了并发安全和持久化保证,通过这样的方式向上层应用提供了一个分布式文件系统。

  • 通过Journal日志维护一个持久化的状态,保证每一个inode操作的持久性和原子性。Alluxio Master通过保证inode信息和每一个操作记录在Journal日志中,从而保障在任何情况下inode信息和更改都不会丢失。

  • Alluxio的InodeTree通过将锁粒度精细到每一个inode,支持inode级别的读写并发访问。对每一个inode通过锁进行并发控制,保证在并发读写中inode的线程安全。

1.2 数据块(block)元数据

如果inode对应一个文件,则它有0个(空文件)或多个数据块。对一个新建文件而言,所有数据块大小都由 alluxio.user.block.size.bytes.default 设置,只有最后一个数据块除外。只有1个数据块的文件也算作是最后一个数据块。数据块的元信息管理相对inode而言比较简单,因为数据块之间不具有树状的结构或者亲子关系。

Alluxio Master保存着数据块的元信息以及数据块缓存的当前位置,并对外提供了对这些信息的读写接口。Alluxio Master管理的数据块元数据可以简要地被看作两个键值存储:

(1)<BlockID, BlockMetadata>

 (2)<BlockID, List<BlockLocation>>

其中,BlockMetadata记录了数据块的长度。BlockLocation记录了这个数据块(缓存)存在的Alluxio Worker节点地址,和这个数据块在Alluxio Worker节点上的具体存储位置。

这两个不同的信息被分开存储主要是因为它们的生命周期不同。Block Metadata是不变的(Immutable)。Alluxio不支持对已经写完的数据块进行随机更改或追加。如果这个文件被重写,它会得到新的FileID(即InodeID)和新的BlockID,旧的数据块会被舍弃。相反,BlockLocation列表是会不断变化的,比如当这个数据块被加载进一个新的Alluxio Worker,或者被从某一个Alluxio Worker上驱逐之后,这个列表信息都会对应地改变。

MountTable

MountTable管理着所有Alluxio文件系统中的挂载点,提供了诸如挂载点的创建和更改操作。同时Alluxio文件路径和底层存储的文件路径也通过MountTable互相解析对应。

1.3 Worker元数据

Alluxio Master对Alluxio Worker元数据的管理包括了追踪当前有哪些正在工作的Alluxio Worker,并且不断更新Alluxio Worker上的缓存列表。Alluxio Master记录的信息主要包括:

(1)Alluxio Worker的地址、启动时间等不变信息。

(2)Alluxio Worker的空间使用情况,包括多层缓存中每层的使用量,随每次心跳更新。

(3)Alluxio Worker中被缓存的所有BlockID和将要从Alluxio Worker中移除的所有BlockID。这些信息随着每一次心跳和数据块操作(加载、驱逐等)而改变。

02 分布式文件系统元数据的存储模式

分布式文件系统的元数据存储通常包括堆上存储和堆外存储两种。其中,堆上存储访问高效,但是空间有限,而堆外存储空间大,但如果设计不当会造成性能损失。

2.1 元数据存储在堆上(HEAP模式)

以Alluxio为例,在HEAP模式下,所有元信息都以Java对象的形式存储在JVM的堆中。每一个文件在堆上的内存占用大约为2KB4KB。因此,当Alluxio文件系统中有大量的文件时,堆上元信息将会给JVM带来大量内存压力。不难算出,系统中有1亿文件时,JVM上仅仅是存储这些文件的元信息就会占用200GB400GB。加上Master JVM必须承担的大量RPC操作内存开销,这个JVM对内存的需求是普通服务器很难承受的。

此外,对大部分JVM版本而言,如此数据规模下的GC会变得非常难以管理。Alluxio Master JVM中的这些元信息都是长久存在的对象,尤其会给老年代的GC效率带来很大的影响。尽管有一些商业版JVM可以避免部分或大部分JVM带来的性能和管理问题,但是对大多数用户来说,JVM占用过多还是一个十分棘手的痛点,尤其是Alluxio Master 的JVM可能在未来随着业务扩展可能超出物理机内存的上限。

2.2 元数据存储在堆外(ROCKS模式)

针对HEAP模式难以扩展的问题,Alluxio优化了设计方向。Alluxio 在2.0版本中引入了ROCKS模式,将元信息存储挪到了JVM之外。在ROCKS模式下,Alluxio Master内嵌了一个RocksDB,将文件(和数据块)的元信息从之前的JVM堆上挪到了RocksDB中,而RocksDB的存储介质实际是硬盘而非内存。使用RocksDB存储元数据只需要配置元数据存储模式并指定RocksDB存储的路径:

alluxio.master.metastore=ROCKS

alluxio.master.metastore.dir=${alluxio.work.dir}/metastore

Alluxio内嵌的RocksDB会使用 alluxio.master.metastore.dir 配置的路径作为自己的元数据存储。以下示例中,我们查看一个运行中的Alluxio集群的RocksDB存储,可以见到Alluxio在RocksDB中保存的Inode和Block元数据各有一个存储目录,并维护了由RocksDB管理的数据文件。RocksDB的存储目录结构在本书中不做赘述,读者可以查看RocksDB的官方文档。

$ ls -al -R metastore/

metastore/:

total 8

drwxrwxr-x. 2 alluxio-user alluxio-group 4096 May 21 03:20 blocks

drwxrwxr-x. 2 alluxio-user alluxio-group 4096 May 21 03:33 inodes


metastore/blocks:

total 4264

-rw-r--r--. 1 alluxio-user alluxio-group     0 May 21 03:20 000005.log

-rw-r--r--. 1 alluxio-user alluxio-group    16 May 21 03:20 CURRENT

-rw-r--r--. 1 alluxio-user alluxio-group    36 May 21 03:20 IDENTITY

-rw-r--r--. 1 alluxio-user alluxio-group     0 May 21 03:20 LOCK

-rw-r--r--. 1 alluxio-user alluxio-group 52837 May 21 03:30 LOG

-rw-r--r--. 1 alluxio-user alluxio-group   176 May 21 03:20 MANIFEST-000004

-rw-r--r--. 1 alluxio-user alluxio-group 13467 May 21 03:20 OPTIONS-000009

-rw-r--r--. 1 alluxio-user alluxio-group 13467 May 21 03:20 OPTIONS-000011


metastore/inodes:

total 4268

-rw-r--r--. 1 alluxio-user alluxio-group     0 May 21 03:20 000005.log

-rw-r--r--. 1 alluxio-user alluxio-group  1211 May 21 03:33 000012.sst

-rw-r--r--. 1 alluxio-user alluxio-group    16 May 21 03:20 CURRENT

-rw-r--r--. 1 alluxio-user alluxio-group    36 May 21 03:20 IDENTITY

-rw-r--r--. 1 alluxio-user alluxio-group     0 May 21 03:20 LOCK

-rw-r--r--. 1 alluxio-user alluxio-group 58083 May 21 03:33 LOG

-rw-r--r--. 1 alluxio-user alluxio-group   247 May 21 03:33 MANIFEST-000004

-rw-r--r--. 1 alluxio-user alluxio-group 13679 May 21 03:20 OPTIONS-000009

-rw-r--r--. 1 alluxio-user alluxio-group 13679 May 21 03:20 OPTIONS-000011

2.3 堆外存储的内存和磁盘占用

在ROCKS模式下,元信息被存储在堆外的RocksDB中,这样会极大地降低元信息存储对Alluxio Master进程的内存压力。与HEAP模式相比,所有的元信息读写从内存速度降低到了硬盘速度,这将会很大程度上影响Alluxio Master的性能和吞吐量。因此Alluxio Master在内存中加入了一个缓存来加速对RocksDB的访问。换言之,在ROCKS模式下,元信息存储的内存占用变成了这部分缓存的内存占用。与HEAP模式下的内存占用估算类似,缓存中每一个文件的元信息存储占用同样的2KB~4KB。

缓存的大小由 alluxio.master.metastore.inode.cache.max.size 控制。这个配置项的值根据Alluxio版本可能有所不同。Alluxio Master会先写入缓存,当缓存达到一定使用量之后才开始写入RocksDB(磁盘)。RocksDB的磁盘占用情况如下:大约100万个文件的元信息占用约4GB的硬盘空间。值得注意的是,当Alluxio命名空间内文件数量未触发基于 alluxio.master.metastore.inode.cache.max.size 的驱逐时,所有文件元信息都在基于内存的缓存内,未写入RocksDB,此时这些文件的元信息磁盘占用接近于0。

2.4 对堆外存储的缓存加速和调优

当内存空间充足时,适当调大 alluxio.master.metastore.inode.cache.max.size 可以将更多文件元信息缓存在内存中来提升性能。同时需注意,Alluxio Master上的RPC操作也会消耗内存。即使没有进行中的RPC操作,Alluxio Master上仍然会有一些定期的文件扫描等内部管理逻辑会消耗内存。在估算Alluxio Master进程中内存时,需要一定要预留足够内存给这些操作,不要让元信息存储占用了所有的内存。这和在服务器上不能把100%的内存都分配给应用而不给操作系统预留内存空间的道理是一样的。元信息缓存的管理是基于水位机制的,用户配置一个高水位参数和一个低水位参数,比如以下是默认配置:

alluxio.master.metastore.inode.cache.high.water.mark.ratio=0.85

alluxio.master.metastore.inode.cache.low.water.mark.ratio=0.8

在缓存使用达到 0.85 * alluxio.master.metastore.inode.cache.max.size时,缓存数据会开始驱逐,将缓存中的数据内容写入RocksDB存储。在缓存占用率降低到0.8时停止驱逐。

2.5 在HEAP和ROCKS模式间切换

使用HEAP模式和ROCKS模式下Journal日志的格式不同,因此从一种模式切换到另一种不能通过简单的更改配置并重启Alluxio Master进程来完成。元数据存储模式的切换可以通过从备份中启动集群完成,见4.5章节。

本文以Alluxio为例,简要介绍了分布式文件系统的元数据基本类型及其管理和优化方法,更多的数据访问优化细节可以进一步参考查阅Alluxio开源社区代码,也欢迎阅读最近机械工业出版社出版的技术书籍《分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践》:

本书以广泛使用的Alluxio 2.8.0开源版本为基础编写,深入介绍Alluxio相关分布式统一大数据文件系统的技术原理与实践案例,主要内容包括系统入门与使用、内核组件设计实现原理,同时详细介绍了大型企业应用案例与实践,并附有Alluxio的开源社区开发者指南。本书为Alluxio开源社区用户、高校大数据系统课程师生以及潜在企业用户提供了较为完整的技术指南和实用教程,既可作为大数据专业方向的专业教材,也可作为大数据从业者和研究者的重要专业资料。

在这里插入图片描述

特别预告:

9月21日晚20:00,本书三位作者顾荣,刘嘉承,毛宝龙老师将为大家带来“Alluxio: 加速新一代大数据与AI变革”的精彩直播。欢迎关注视频号“IT阅读排行榜”订阅直播提醒。

写作末尾

🌻《分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践》:免费包邮送出
🌴根据博客阅读量本次活动一共赠书若干本,评论区抽取若干位小伙伴免费送出
500-1000 赠书2本
1000-1500 赠书3本
1500-2000 赠书4本
2000+ 赠书5本
🌵参与方式:关注博主、点赞、收藏、评论区任意评论(不低于10个字,被折叠了无法参与抽奖,切记要点赞+收藏,否则抽奖无效,每个人最多评论三次)
🌼活动截止时间:2023-09-25 12:00:00
🍒开奖时间:2023-09-25 14:00:00
🍀中奖通知方式:私信通知
🍉兑奖方式:截图证明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智安网络|提升企业网络安全:避免成为勒索软件攻击的目标

勒索软件是当前网络世界中一种威胁严峻的恶意软件类型&#xff0c;勒索软件攻击近年来不断增加&#xff0c;越来越多的企业成为勒索软件攻击的目标。这种攻击方式通过加密敏感数据&#xff0c;并勒索企业支付赎金以解锁数据&#xff0c;给企业造成严重的经济损失与声誉风险。企…

GDB之call、print手动调用函数(十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

SSM - Springboot - MyBatis-Plus 全栈体系(八)

第二章 SpringFramework 四、SpringIoC 实践和应用 4. 基于 配置类 方式管理 Bean 4.4 实验三&#xff1a;高级特性&#xff1a;Bean 注解细节 4.4.1 Bean 生成 BeanName 问题 Bean 注解源码&#xff1a; public interface Bean {//前两个注解可以指定Bean的标识AliasFor…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(六)

文章目录 一、Co-Scale Conv-attentional Image Transformer&#xff08;CoaT&#xff09;二、Pyramid Vision Transformer v2(PVTv2)三、Class-Attention in Image Transformers&#xff08;CaiT&#xff09;四、PoolFormer五、ScaleNet六、VoVNet七、Siamese U-Net八、Single…

MT4和MT5的共同点,anzo capital昂首资本说一个,没人有意见吧

相信很多交易者对MT4和MT5都不会陌生&#xff0c;但您了解他们背后之间的关系吗?今天anzo capital昂首资本就和各位交易者一起聊聊&#xff0c;没人有意见的MT4和MT5的共同点。 其实谈起MT4和MT5&#xff0c;就不得不聊聊他们背后的公司MetaQuotes&#xff0c;MetaQuotes 是…

家政小程序源码家政预约小程序独立版,家政上门预约,功能强大

家政服务行业作为一个相对传统的行业&#xff0c;随着互联网的发展迅速&#xff0c;和用户群体的改变&#xff0c;家政服务公司也需要改变一下经营思路了&#xff0c;否则未来很难满足新一代用户群体的个性化需求。 核心功能&#xff1a; 1、师傅(服务人员)入驻&#xff1a;家…

IDEA怎么将CRLF转化为LF

执行命令&#xff1a; git config --global core.autocrlf input 或者使用IDEA的自动提交的修复

2023 Google开发者大会:你了解机器学习的新动向吗?

目录 0 年度科技盛会1 生成式机器学习2 无障碍游戏体验3 跨平台机器学习总结 0 年度科技盛会 2023Google开发者大会在上海浦东举办&#xff0c;为开发者和科技爱好者们带来新技术、新产品、新动向 可能很多同学对Google 开发者大会还不熟悉&#xff0c;Google 开发者大会是 G…

异步FIFO设计

1 FIFO简介 FIFO的本质是RAM&#xff0c;具有先进先出的特性。 FIFO的基本使用原则&#xff1a;空时不能读&#xff0c;满时不能写 FIFO的两个重要参数&#xff1a;宽度和深度 FIFO的两种类型&#xff1a; 同步FIFO&#xff1a;读写时钟相同&#xff0c;通常用来做数据缓存…

医疗领域超低温监控,你了解吗?

超低温冰箱在医疗保健领域中扮演着不可或缺的角色。它们被广泛用于存储生物样本、药物和疫苗等温度敏感的医疗物品&#xff0c;以确保这些关键资源的质量和有效性。 然而&#xff0c;温度波动和不稳定性可能会对这些物品造成严重损害&#xff0c;甚至威胁患者的生命。为了应对这…

对话泛微:产业数字化时代,我们需要怎样的OA?

在泛微诞生以后的十年&#xff0c;恰是OA系统的大规模突破。十年间&#xff0c;上百家OA企业的诞生直接将市场推向了鼎盛期。而后又迎来了移动互联网风口&#xff0c;在互联网厂商的冲击之下&#xff0c;传统OA在不断进击的同时&#xff0c;还要进行自我蜕变&#xff0c;成为“…

ppt录制在哪?实用技巧分享!

在现代演示和培训中&#xff0c;PPT演示已经成为越来越流行的一种交流方式。而录制ppt也成为了很多商务演讲、教学讲解、产品演示等场合的必备技能。本文将为您介绍两种常见的ppt录制方式&#xff0c;帮助您轻松录制ppt演示的过程。 ppt录制在哪&#xff1f; ppt是一款流行的演…

操作系统Deepin DTK顺利适配Qt6,从而提供更高效开发体验

据了解&#xff0c;当前deepin DTK(Development ToolKit)已经在近日顺利适配Qt6 (6.4.2)&#xff0c;从而实现全面升级。 据悉&#xff0c;DTK作为 deepin 基于Qt开发的一整套通用开发框架&#xff0c;并且是deepin操作系统中的核心位置。    Multiable万达宝ERP(www.multi…

打败全国百分之99.99的模板方法模式讲解

目录 背景&#xff1a;模板方法定义&#xff1a;步骤&#xff1a;初始版&#xff1a; 每个人都抄卷子&#xff0c;然后抄完写自己的答案第一版&#xff1a;将试卷的题抽象出来第二版&#xff1a;将每个人回答的部分抽象出来第三版&#xff1a;将答题步骤封装出来&#xff08;这…

lenovo联想Legion Y9000P IRX8H 2023款(82WQ)原装出厂Windows11系统

联想拯救者笔记本电脑原厂系统自带网卡、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1YBji_oh7xOkq-NxnS8Mm8g?pwdn17o 提取码&#xff1a;n17o 所需要工具&#xff1a;16G或以上的U盘 文件…

el-table 列背景色渐变

最初的想法是&#xff0c;给每一行添加背景色&#xff0c;逐行递减透明度&#xff0c;发现结果比较突兀&#xff0c;效果如下&#xff1a; 如果有需要这种样式的&#xff0c;代码如下&#xff1a; <template><div><el-table:data"tableData":heade…

小麦苗GreenPlum学习大纲

腾讯文档 课程文档内容如下&#xff1a; 小麦苗GreenPlum课程公开课-- 数据库通用学习路线、答疑、培训、考证等&#xff1a;https://docs.qq.com/doc/p/b65bcd7647a9974a94b97fb06d04a089c25a7f0c 小麦苗GreenPlum课程第0节-- 数据库简介、分类、发展、流行度排名等&#xf…

Docker容器化技术(从零学会Docker)

文章目录 前言一、初识Docker1.初识Docker-Docker概述2.初识Docker-安装Docker3.初识Docker-Docker架构4.初识Docker-配置镜像加速器 二、Docker命令1.Docker命令-服务相关命令2.Docker命令-镜像相关命令3.Docker命令-容器相关命令 三、Docker容器的数据卷1.Docker容器数据卷-数…

Python:函数定义的参数

相关阅读 Python专栏https://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 函数定义就是定义一个用户自定义的函数对象&#xff0c;它的语法的BNF范式如下所示&#xff0c;有关BNF范式的规则&#xff0c;可以参考之前的文章。 funcdef …

asp.net+sqlserver+c#教师工作量计算系统

本课题主要是解决工作量管理管理中的日常中涉及到的问题&#xff0c;目标是使工作量在管理上做到数据的信息化、快速化。 系统在实现上应至少具有如下功能&#xff1a; (1)教师信息管理 该模块包括教师信息的添加、修改。 (2)个人信息 该模块是对用户登录系统后对自己信息的修改…