阿里网盘优质资源分享 阿里云管理控制台( 三 )


DLA Meta 中所有对外的元数据API 都是有权限校验的,比如Create Database 是需要有全局的Create 或All 权限的 。只有权限校验通过才可以进行下一步的操作 。目前DLA Meta 权限控制粒度是做到表级别的,可以对用户授予表级别的权限;当然,列粒度、分区粒度的权限我们也是可以做到的,目前还在规划中 。下面是我们权限校验的处理流程:
由于DLA Presto可以兼容MySQL 权限操作相关,为了降低用户的使用成本,当前DLA Meta 的权限是与MySQL 权限是兼容的,所以如果你对MySQL 的权限体系比较了解,那么这些知识是可以直接运用到DLA 的 。
2、元数据发现Schema推断技术
元数据发现的定位:为OSS等存储上面的数据文件自动发现和构建表、字段、分区,并感知新增表&字段&分区等元数据信息,方便计算与分析 。
从上图可以看出,元数据发现的输入是一个父目录,下面可以包含百万级别OSS的文件,同时这些文件还在增量的添加 。输出为根据Schema信息进行聚合生成数目为万级别的表,以及单表万级别分区 。元数据自动发现引擎主要包括文件Schema识别器、文件表分类器、Meta同步三块,下面重点介绍Schema识别器、以及文件表分类器 。
文件Schema识别器:这个模块主要用来推断OSS上面文件的格式及字段 。对于一个文件完全没有Schema信息情况下,首先需要推断出是什么格式,然后还需要推断出具体的字段 。整个模块包括文件采样、Schema识别器两块 。测试表明单个文件的Schema探测需要150ms左右,如果对所有的文件进行全量的识别,整个效率会比较低,DLA 元数据发现有一套采样的技术,减少文件识别的数量 。具体的Schema识别器由一组Schema推断的策略组成,面对一个没有任何先验信息的文件,通过逐个匹配CSV、JSON、Parquet等推断器的方式来进行识别,每种推断器在效率和准确性上面做了大量优化,比如CSV内部包含了30+种根据表头、分隔符、转义、引用组合的策略,同时字段的识别使用数据行采样的方式保证准确率的情况下,减少远程IO读取 。
文件分类器:由于文件在OSS上面是按照目录存储的,当通过Schema识别器识别出了叶子节点目录下面的Schema情况后,如果每个叶子节点目录创建一张表,表会很多,管理复杂且难以分析 。因此需要有一套文件分类器来聚合生成最终的表 。且支持增量文件的Schema变更,比如添加字段、添加分区等 。下面是整个分类算法过程,根据目录树形的结构,第一步先深度遍历并结合“文件Schema识别器”在每个节点聚合子节点的Schema是否兼容,如果兼容则把子目录向上合并为分区,如果不兼容则每个子目录创建一张表 。经过第一步后每个节点是否可以创建表、分区信息,以及合并后的Schema都会存储在节点上面;第二步再次遍历可以生成对应的Meta创建事件 。
这种通用的算法可以识别任意目录摆放,但是由于面向海量分区的场景,事先不知道分区目录是否可以聚合,这样每个目录都需要采样识别,且在聚合时如果某个分区和其他分区兼容度达不到要求,会拆分生成大量的表,在这种场景下性能一般 。如果用户的OSS目录结构按照典型的数仓结构,库、表、分区模式规划,那么在分区识别及表识别上面会有固定的规则,这样可以对上面的算法遍历过程剪枝,分区间的采样率进一步减少,且容错率更高 。数仓模式的目录规划需要如下:
3、海量分区处理技术
分区投影
在大数据场景中,分区是用于提升性能非常常见的方法,合理划分分区有利于计算引擎过滤掉大量无用的数据从而提升计算性能 。但是如果分区非常多,比如单表数百万的分区,那么计算引擎从元数据服务查询分区所需要的时间就会上升,从而使得查询的整体时间变长 。比如我们客户有张表有130多万分区,一个简单的分区过滤查询元数据访问这块就花了4秒以上的时间,而剩下的计算时间却不到1秒!


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: