【51CTO.com快译】元数据同步是关于Alluxio的重要特性。这篇文章描述了设计、元数实现和其他内部流程,据同用以调整性能。设计实现 元数据同步(sync)是和优化Alluxio中的核心功能,它使文件和目录与所在存储系统下真实的关于来源保持一致,进而使用户能够轻松地从Alluxio中检索出最新版的元数数据。同时了解内部流程对调整性能也非常重要。据同本文介绍了Alluxio中保持元数据同步的设计实现设计和实现。 在Alluxio中,和优化元数据指的关于是Alluxio文件系统中文件和目录的信息,包括它们的元数所有者、组、据同权限、设计实现创建以及修改时间等信息。和优化元数据独立于其内容——即使文件或目录是空的,但它仍然具有关联的元数据。 Alluxio维护文件系统或底层存储系统的对象存储命名空间的副本。云服务器提供商在Alluxio中,元数据一致性很重要,尤其是不同集群在数据管道中写入或读取数据后,并在Alluxio之外进行更改时。 在上图中是一个典型的场景,结合了Spark ETL和Presto SQL的数据管道。ETL集群(不带Alluxio)写入数据,然后是分析集群,Alluxio读取转换后的数据。因为Alluxio维护了底层存储的元数据副本并管理元数据,因此当底层存储中的数据通过ETL步骤发生变化时,必须使分析群集上的Alluxio实例感知到并与底层存储系统中的元数据保持一致以便正确操作。 Alluxio在一个或多个底层存储系统上的统一命名空间中提供了文件系统抽象。通过Alluxio访问文件或目录,会得到和直接访问under storage一样的结果。比如如果挂载到Alluxio根目录的底层存储是s3://bucket/data,那么在Alluxio中列出“/”目录与在s3://bucket/data中列出对象并在其中打印“/file”产生相同的云南idc服务商结果应该返回与s3://bucket/data/file一样的结果。 在Alluxio中元数据只从Alluxio master中存储和提供,但单个文件的内容则由Alluxio worker提供。 默认情况下,Alluxio根据需要从底层存储加载元数据。在上面的例子中,一个从空开始的Alluxio master在启动后没有任何关于s3://bucket/data/file的信息。仅当某些用户在Alluxio中列出“/”目录或尝试访问“/file”时才会识别此文件。这种“惰性”行为可以防止不必要的工作并能显著提高性能,因为底层存储中的元数据操作可能很慢。 注意,更新元数据可以是双向的。如果对文件系统的所有修改都是通过Alluxio发生,那么Alluxio只需要扫描一次under storage即可检索初始状态,然后作为文件系统RPC调用的一部分同步应用Alluxio和under storage中的更改。这将为用户提供一致的存储不足视图。然而实际上Alluxio之外的存储不足经常发生变化,因此Alluxio master必须监控对under storage中文件和方向的源码下载添加、删除和更新,并将更改应用到Alluxio文件系统中。这个同步两个命名空间的过程称为元数据同步。 当应用程序更改了 Alluxio 文件的元数据并且该文件被持久化时,更改将始终同步传播到底层存储无需触发元数据同步。当应用程序在存储文件下更新而不让 Alluxio 知道时,有两种方法可以控制元数据同步的时间。 将同步间隔设置到Alluxio属性键“alluxio.user.file.metadata.sync.interval”上。 注意,使用这种方式如果从未访问过Alluxio中的路径,则它将永远不会触发同步。一旦在同步间隔到期后访问路径,Alluxio将再次与under storage同步。例如在Presto作业中,查询计划阶段列出了该作业所需的所有文件,如果这些路径最近未被访问则会触发同步。但是除非作业持续时间超过同步间隔,否则作业的后续阶段将不会同步。 因此,在这种情况下,从技术上来讲我们可以比同步间隔更频繁地重新同步。 可以使用全新的全局默认值(在 alluxio-site.properties 中设置时)进行自定义,也可以在目录基础上递归地应用其所有子项来自定义此属性键。 如果同步元数据时由于同步间隔而未发生,则大多数Alluxio操作将继续使用Alluxio文件系统中当前的元数据执行,但也有一些例外: 当Alluxio master收到RPC请求检索此路径的元数据时,Alluxio master可能会在Alluxio路径上触发元数据同步。而不是有一个专用的服务来遍历整个文件系统inode树并保持同步,这项工作由master上的每个单独的Alluxio文件系统操作来分摊。在 RPC 请求中同步的高级过程是: 注意如果元数据同步过程涉及inode树的同一部分,则元数据同步过程可能会相对昂贵,并且会阻止其他操作。这是因为同步进程可能会写锁定它正在更新的文件系统的元数据部分。特别是当同步树中的特定路径时,RPC处理线程将首先获取文件整个路径上的读锁。因为同步线程也需要创建路径的能力,所以它需要同步根路径的写锁。 当同步线程处理根路径下的每个路径时会获得额外的锁,同步线程获取文件路径的写锁并在处理路径后立即释放。 可以通过控制三个配置参数来调整并行度来同步元数据: 有三种类型的不同缓存,在元数据同步过程中具有不同的目标和用途。以下是所有这些内容的快速总结。 元数据同步是Alluxio中最重要的功能之一。有多种不同的方法可以触发同步,但需要权衡不同的性能。在Alluxio master内部有一个优化列表,用于加速同步。 朱钢,51CTO社区编辑,2019年CSDN博客专家20强,2020年腾讯云+社区优秀作者,10年一线开发经验,曾参与猎头服务网站架构设计,企业智能客服以及大型电子政务系统开发,主导某大型央企内部防泄密和电子文档安全监控系统的建设,目前在BIM头部企业从事招投标软件开发。 原文标题:Metadata Synchronization in Alluxio: Design, Implementation, and Optimization,作者:David Zhu 【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
元数据同步为什么在Alluxio中很重要
在Alluxio中元数据同步是如何工作的
如何触发元数据同步
1. 基于时间的自动同步
2. 使用 LoadMetadata 标志手动同步
如何实现元数据同步
Performance Optimization
调整并行度
缓存结果
总结
译者介绍