网站建设的标语火币网站怎么做空
web/
2025/9/27 19:22:11/
文章来源:
网站建设的标语,火币网站怎么做空,网站架构设计师待遇怎么样,手表东莞网站建设技术支持前言 「作者主页」#xff1a;雪碧有白泡泡 「个人网站」#xff1a;雪碧的个人网站 「推荐专栏」#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄#xff…前言 「作者主页」雪碧有白泡泡 「个人网站」雪碧的个人网站 「推荐专栏」 ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄vue成神之路★ ★ 解决算法一个专栏就够了★ ★ 架构咱们从0说★ ★ 数据流通的精妙之道★ ★后端进阶之路★ 文章目录 前言送书福利01 分布式文件系统元数据的常见类型文件inode元数据数据块block元数据MountTableWorker元数据 02 分布式文件系统元数据的存储模式2.1 元数据存储在堆上HEAP模式2.2 元数据存储在堆外ROCKS模式2.3 堆外存储的内存和磁盘占用2.4 对堆外存储的缓存加速和调优 送书福利 本次送书1~5本【取决于阅读量阅读量越多送的越多】⌛️活动时间截止到2023-9月 13 号✳️参与方式关注博主三连点赞、收藏、评论评论可最多评论三条 私信我进送书互三群有更多福利哦 当今我们的世界已经进入一个数据时代。随着互联网、物联网、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管理的数据块元数据可以简要地被看作两个键值存储
1BlockID, BlockMetadata
2BlockID, 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记录的信息主要包括 1Alluxio Worker的地址、启动时间等不变信息。 2Alluxio Worker的空间使用情况包括多层缓存中每层的使用量随每次心跳更新。 3Alluxio 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.metastoreROCKSalluxio.master.metastore.dir${alluxio.work.dir}/metastoreAlluxio内嵌的RocksDB会使用 alluxio.master.metastore.dir 配置的路径作为自己的元数据存储。以下示例中我们查看一个运行中的Alluxio集群的RocksDB存储可以见到Alluxio在RocksDB中保存的Inode和Block元数据各有一个存储目录并维护了由RocksDB管理的数据文件。RocksDB的存储目录结构在本书中不做赘述读者可以查看RocksDB的官方文档。
$ ls -al -R metastore/metastore/:total 8drwxrwxr-x. 2 alluxio-user alluxio-group 4096 May 21 03:20 blocksdrwxrwxr-x. 2 alluxio-user alluxio-group 4096 May 21 03:33 inodesmetastore/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-000011metastore/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-0000112.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.ratio0.85alluxio.master.metastore.inode.cache.low.water.mark.ratio0.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开源社区用户、高校大数据系统课程师生以及潜在企业用户提供了较为完整的技术指南和实用教程既可作为大数据专业方向的专业教材也可作为大数据从业者和研究者的重要专业资料。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82931.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!