【猿灰灰赠书活动 - 04期】- 【分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践】

news2025/2/28 4:44:44

👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书)
👨‍💻本文简述:博文为大家争取福利,与机械工业出版社合作进行送书活动
👨‍💻图书:《分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践》
👨‍💻有任何问题,都可以私聊我,文章最后有vx名片。感谢支持!
🦹知道的越多,不知道的越多!!!不能停下学习的脚步

在这里插入图片描述

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

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

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

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

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

文件(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的线程安全。

数据块(block)元数据

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

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

(1)<BlockID, BlockMetadata>

(2)<BlockID, List>

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

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

MountTable

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

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开源社区用户、高校大数据系统课程师生以及潜在企业用户提供了较为完整的技术指南和实用教程,既可作为大数据专业方向的专业教材,也可作为大数据从业者和研究者的重要专业资料。
在这里插入图片描述

03 参加方式

本书赠送5本,均从评论区进行抽取

  • 活动时间:截止到2023-09-11 18:00:00 (周一开奖)
  • 抽奖方式:博主编写random代码把评论区所有用户加入池中进行抽奖
  • 参与方式:关注博主、点赞、收藏、评论“全力支持猿灰灰!!!” (每个人最多可以有两条评论进入抽奖池中)

04 中奖名单公布

中奖用户通过文末加我微信发送地址给我

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

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

相关文章

07-Spring Cloud

1、如何设计一个注册中心&#xff1f; 高可用&#xff1a;通过集群的方式 高并发&#xff1a;减少响应时间、提高吞吐量 并发用户数等&#xff0c;通过增加服务器性能、 扩展服务实例的方式 高性能&#xff1a;程序处理速度 考虑 数据存储结构、通信机制、集群同步。 集群…

Fiddler 查看响应时间(超详细~)

Fiddler 查看响应时间 步骤1&#xff1a;打开Fiddler&#xff0c;找到FiddlerScript这个标签 步骤2&#xff1a;将下面的code加入到Script中 public static BindUIColumn("TimeTaken/ms", 120)function TimeTaken(oS: Session):String{var sResult "0";…

动态住宅代理能使用在哪些场景

一、什么是动态住宅代理ip 动态住宅代理是一种代理技术&#xff0c;它利用代理服务器中转用户和目标服务器之间的网络流量&#xff0c;实现用户真实位置的屏蔽。代理提供商会有自己的ip大池子&#xff0c;当你通过代理服务器向网站发送请求时&#xff0c;服务器会从池子中选中…

【漏洞库】Fastjson_1.2.24_rce

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述 Fastjson 存在反序列化远程代码执行漏洞&#xff0c;当应用或系统使用 Fastjson 对由…

全志T113-S3入门资料汇总(避坑指南)一

也是闲着无事买了个芒果派的T113的小板子&#xff0c;因为自己以前搞过Linux&#xff0c;工作也跟Linux相关&#xff0c;本以为可以很快搞好开发环境&#xff0c;结果还是折腾了两个周末&#xff0c;所以就把资料整理下&#xff0c;关键的地方列出来&#xff0c;希望大家少走弯…

实现稳定可靠的消息通信:Paho MQTT Android

实现稳定可靠的消息通信&#xff1a;Paho MQTT Android 该项目基于java版本paho mqtt android实现&#xff0c;使用kotlin语言重新实现&#xff0c;它是一个用Kotlin编写的MQTT客户端库&#xff0c;旨在提供可靠的开源实现&#xff0c;适用于面向物联网&#xff08;IoT&#x…

为什么vector容器的begin()既可以被iterator 也可以被const_iterator指向?

答&#xff1a;vector容器中的begin&#xff08;&#xff09;是函数接口&#xff0c;它作为函数&#xff0c;被重载了。 typedef T* iterator; typedef const T* const_iterator; iterator begin();//括号中有隐含形参*this&#xff1b; const_iterator begin() const;//形参为…

Vue3中快速简单使用CKEditor 5富文本编辑器

Vue3简单使用CKEditor 5 前言准备定制基础配置富文本配置目录当前文章demo目录结构 快速使用demo 前言 CKEditor 5就是内嵌在网页中的一个富文本编辑器工具 CKEditor 5开发文档&#xff08;英文&#xff09;&#xff1a;https://ckeditor.com/docs/ckeditor5/latest/index.htm…

对话 Gear|波卡生态下一代 WASM 智能合约平台

在 Polkadot 生态中&#xff0c;Gear 正在创建一个托管智能合约的网络。每个人都可以在 Polkadot 和 Kusama 上部署 dApp&#xff0c;不仅可以充分利用其生态系统的所有优势&#xff0c;而且成本更低。因其无需开发者从零开始构建和运营完整的区块链网络&#xff0c;所以 Gear …

TSINGSEE青犀/视频分析/边缘计算/AI算法·人员/区域入侵功能——多场景高效运用

TSINGSEE青犀视频人员/区域入侵功能可对重要区域进行实时监测&#xff0c;对监控区域进行7*24全天候管控&#xff0c;当监测到有人员靠近、闯入时&#xff0c;AI算法后台就会立即发出告警及时通知管理人员&#xff0c;变被动“监督”为主动“监控”&#xff0c;真正做到事前预警…

团队高效协作有多重要?介绍一些优秀的团队协作工具

不论企业大小&#xff0c;团队协作对企业来说是至关重要的&#xff0c;它可以对业务运营和组织效率产生积极影响。 当团队成员能够协同工作、分享信息和资源时&#xff0c;工作流程更加顺畅&#xff0c;决策更加快速且准确。分工合作和共享知识可以减少重复劳动&#xff0c;提…

【猿灰灰赠书活动 - 05期】- 【速学Linux:系统应用从入门到精通】

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;博文为大家争取福利&#xff0c;与机械工业出版社合作进行送书活动 &#x1f468;‍&#x1f…

【腾讯云生态大会】腾讯云向量数据库

【腾讯云生态大会】腾讯云向量数据库 一、 腾讯云向量数据库介绍二、向量数据库的产品规格三、向量数据库关键概念四、向量数据库的使用之新建数据库实例五、向量数据库的初体验六、向量数据库的使用之检索性能压测七、总结 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让…

MNIST手写数字辨识-cnn网路 (机器学习中的hello world,加油)

用PyTorch实现MNIST手写数字识别(非常详细) - 知乎 (zhihu.com) 参考来源&#xff08;这篇文章非常适合入门来看&#xff0c;每个细节都讲解得很到位&#xff09; 一、模块函数用法-查漏补缺&#xff1a; 1.关于torch.nn.functional.max_pool2d()的用法&#xff1a; 上述示例…

56、springboot ------ RESTful服务及RESTful接口设计

★ RESTful服务 RESTful服务是“前后端分离”架构中的主要功能&#xff1a; 后端应用对外暴露RESTful服务&#xff0c;前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 <------------------> 前端★ 基于JSON的RESTful服务 使用RestController注解…

Linux 系统时间同步 ​使用 NTP 服务时间同步​

目录 一、使用 NTP 服务时间同步 二、启动并设置开机自启 三、配置文件 在 /etc/ntp.conf 四、局域网指定一台服务器作为 时间服务器 一、使用 NTP 服务时间同步 安装 ntp yum -y install ntp 二、启动并设置开机自启 systemctl start ntpd systemctl enable ntpd #开…

vue+antd——实现table表格的打印——分页换行,每页都有表头——基础积累

这里写目录标题 场景效果图功能实现1&#xff1a;html代码功能实现2&#xff1a;css样式功能实现3&#xff1a;js代码补充内容page-break-inside 属性page-break-after属性page-break-before 属性 场景 最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是要实现…

【独家工具】JMeterPerfReporter3.0正式版本,让你的JMeter更好用

Lemon-JMeterPerfReporter工具&#xff0c;是我们性能测试课程教研组根据JMeter性能测试报告的不足&#xff0c;定制开发的一个性能报告生成工具。有需要的同学&#xff0c;可以通过小编官方gitee账户下载&#xff0c;或咨询我免费获取哦&#xff01; 做过性能测试的人员都知道…

单目标应用:基于蜘蛛蜂优化算法(Spider wasp optimizer,SWO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、蜘蛛蜂优化算法 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该…

企业帮助中心如何在线搭建,还能多场景使用呢?

搭建一个企业帮助中心的在线平台可以帮助企业提供高效的客户支持和解决方案。同时&#xff0c;这个平台还可以用于其他场景&#xff0c;例如内部员工培训、知识共享等。下面我将详细介绍如何在线搭建一个企业帮助中心&#xff0c;并且使其能够多场景使用。 选择合适的在线平台…