基于查询和元数据异常检测的数据湖仓聚簇方法与系统与流程

本发明涉及大数据计算,尤其涉及基于查询和元数据异常检测的数据湖仓聚簇方法与系统。
背景技术:
1、在当今日益增长的多源异构、多模态数据环境中,数据湖仓已经成为了一种高效且灵活的数据管理解决方案。在现有的数据湖仓技术中,使用hudi数据湖架构和presto查询引擎是主流方案之一。hudi是一个开源的数据湖仓管理框架,为优化大规模数据集的存储和管理提供了多种服务,同时支持增量数据同步和时间旅行查询。presto是一个分布式sql查询引擎,用于处理大规模数据分析查询。它可以提供历史查询任务的各项性能指标,帮助我们对查询性能进行分析和优化。hudi和presto技术的结合,使湖仓架构能够实时或批量地摄取数据,以满足不同的数据存储需求,并且为用户提供对海量多源异构数据的快速查询服务。
2、虽然结合二者能够提供更加强大且完善的服务,但是,hudi本身也存在着一些潜在的问题。cow表是hudi支持的两种写入模式之一,这种写入模式会使数据文件持续增长,导致数据写入效率降低。并且,在湖仓场景中,数据摄取通常更倾向于写入小文件以改善并行性,尤其是流式场景中不断摄取数据,使cow表持续生成大量小文件,这些小文件会造成查询性能的急速下降。针对上述问题,hudi提出了聚簇机制(clustering)来治理小文件问题。它的核心思想是:在数据摄取时,允许并行写入多个小文件,以提升写入性能,同时通过一个进程周期性地将小文件合并成大文件,来管理数据湖中所拥有的数据。通过这种机制,hudi能够有效的平衡数据摄取和数据查询之间的问题,在保证数据存储效率的同时,也能够有效地减少数据查询的延迟。但是,现有的聚簇机制存在以下几个问题:
3、(1)聚簇机制不支持并发更新。为了避免对正在被重写或移动的文件进行更改而造成数据不一致,hudi对file group实现的是snapshot isolation级别的隔离。在执行聚簇时,不允许对其修改,如果这时提交了更新操作,它将拒绝更新并引发异常。
4、(2)聚簇机制对增量查询不友好。聚簇处理后的数据在增量查询结果中会被视作“新”数据出现,但实际上并未经历任何数据内容的修改。这一过程仅涉及将小文件中的数据重写至大文件中,因此可能被错误地识别为增量数据。
5、(3)同步聚簇的执行次数过多。由于默认生成排期计划的触发条件是数据的commit次数,所以即使产生的小文件并不会对查询造成明显的影响,也会不停的执行同步聚簇操作,这会造成集群资源的大量浪费。异步聚簇虽然可以通过手动提交执行任务来控制聚簇次数,但是其触发条件也是commit次数,在执行完成已提交的排期计划之前,会阻塞新排期计划的生成。并且,异步聚簇依赖于特定配置,需要专业人员来监控和分析集群的运行状况来调整各种参数,以达到预期效果。
6、因此,如何合理的利用hudi的聚簇机制实现数据的布局优化,减少非必要的聚簇操作以避免上述问题的同时,提高数据查询的效率,是数据湖仓场景下所面临的重要问题。
技术实现思路
1、针对现有技术的不足,本发明提出了基于查询和元数据异常检测的数据湖仓聚簇方法。
2、本发明中,首先,利用presto引擎历史查询任务的各项性能指标,将其作为训练数据集保存下来;然后,对数据集进行数据清洗,并输入到基于经验累积分布函数的ecod异常检测算法中进行训练,得到每个查询任务的异常分数,高于既定阈值的任务被判定为可能存在异常;获取异常任务中的表信息,通过hive中存储的元数据信息,得到底层存储中异常表的路径信息,计算该路径下小文件所占比例,并进行二次判定是否为小文件问题导致的异常;最后,将异常表指定为聚簇操作的目标,同步提交排期任务和执行任务,使小文件合并为大小相同或相近的大文件。
3、利用本发明,可以尽可能的控制hudi聚簇操作的执行次数,一定程度上避免聚簇机制产生的并发更新不支持、增量查询不友好和集群资源浪费的问题;另外,与聚簇前相比,本发明能够显著提高presto访问hudi cow表的效率。
4、本发明还提出了基于查询和元数据异常检测的数据湖仓聚簇系统,用于实现上述基于查询和元数据异常检测的数据湖仓聚簇方法。
5、术语解释:
6、hudi:hadoop upserts deletes and incrementals,是一个开源的数据湖管理框架,用于在大数据环境中管理和处理批处理和流式数据;
7、presto:一种用于查询大规模数据的分布式sql查询引擎,其目标是在大规模数据仓库中执行快速、交互式的查询分析,支持多种数据源和数据格式;
8、cow表:cow表(copy on write)是一种采用追加写的数据存储模式,每次写入新数据时,会将旧文件和新数据合并生成全新的数据文件,并且保留历史版本的数据文件;
9、hudi聚簇(clustering):hudi框架的一个核心服务,用于数据湖的数据布局优化,运行模式有同步(inline)和异步(async)两种方式,执行机制分为排期(schedule)和执行(execute)两个阶段;
10、flie group:hudi表中的一种文件结构,用于控制文件版本,同一个file group里有唯一的file id;
11、snapshot isolation级别隔离:一种事务隔离级别,它允许事务在数据的一个一致的快照上执行,而不受其他并发事务所做的更改的影响;
12、hdfs:hdfs(hadoop distributed file system)是一个用于存储和管理大规模数据的分布式文件系统,一个hdfs集群通常由一个名称节点(namenode)和多个数据节点(data node)组成,这些节点协同工作以存储和管理数据;
13、经验累积分布函数(empirical cumulative distribution function)是一种用于可视化数据分布的统计工具。它表示给定数据集中小于或等于给定值的观测值的累积百分比,是一种非参数化的描述统计方法,不对数据分布进行假设,而是直接利用观测到的数据点;
14、高斯核密度估计(gaussian kernel density estimation,kde)是一种非参数统计方法,使用高斯核函数来平滑地估计数据的分布;
15、presto web服务:presto服务提供的一个web ui界面,用于检查和监控presto集群的当前运行状态,以及展示已运行的查询任务列表,每个查询任务都包含全部查询性能指标,可以通过访问相应api获取包含性能指标的json数据。
16、本发明的技术方案为:
17、基于查询和元数据异常检测的数据湖仓聚簇方法,包括:
18、数据采集与预处理:采集历史查询任务的各项性能指标,筛选其中部分相关性能指标作为初始数据集,并对初始数据集进行预处理操作;
19、ec-gkde算法异常判定:通过基于经验累积分布函数和高斯核密度估计方法的ec-gkde算法,对预处理操作后的数据集进行训练,得到所有查询任务的异常分数,对异常查询任务进行初次判定;
20、元数据信息异常判定:获取异常查询任务的关联表,依据异常查询任务的关联表的表信息获取hive元数据服务中hdfs实际路径信息,并计算该hdfs实际路径下小文件所占比例,二次判定该异常查询任务的关联表是否为异常表;
21、聚簇优化:将异常表的信息作为同步聚簇操作的依据,提交聚簇任务,将小文件合并为大文件。
22、根据本发明优选的,采集历史查询任务的各项性能指标,筛选其中部分相关性能指标作为初始数据集,并对初始数据集进行预处理操作;包括:
23、通过presto web服务获取每项查询任务的json数据,对每项查询任务的json数据逐一解析获得每项查询任务的全部性能指标并持久化存储。
24、筛选部分性能指标,筛选后的性能指标与小文件原因导致的查询异常之间存在关联性;
25、进行数据清洗,包括:对筛选后的数据集即筛选后的性能指标进行缺失值处理、重复值处理以及异常值处理,删除数据缺失、完全重复或存在异常值的记录;对数据集的存储单位和时间单位进行标准化处理。
26、根据本发明优选的,通过基于经验累积分布函数和高斯核密度估计方法的ec-gkde算法,对预处理操作后的数据集进行训练,得到所有查询任务的异常分数,对异常查询任务进行初次判定;包括:
27、尾部概率估计:对于数据集中的每个数据点,使用单变量的经验累积分布函数来估计该数据点在全部维度的左尾部ecdf概率和右尾部ecdf概率;
28、尾部权重系数:将同一维度的数据归一化到[0,1]区间,使用高斯核函数计算每一维度数据的核密度,根据每一维度中密度最大的数据点来确定左尾部ecdf概率和右尾部ecdf概率的权重;若每一维度中密度最大的数据点位于数据的右侧,说明异常点集中于左侧,则增加左尾部ecdf概率的权重;反之,增加右尾部ecdf概率的权重;
29、尾部概率聚合:分别从只考虑左尾部、只考虑右尾部以及考虑左尾部ecdf概率和右尾部ecdf概率的权重来聚合尾部概率,得到每个样本的异常分数;
30、异常分数选取:使用负对数空间来表示概率,较低的概率对应于较高的异常分数,在左尾部、右尾部以及考虑权重的尾部概率聚合结果中,选取最大值作为最终的异常分数;
31、异常任务判定:得到异常分数后,根据实际场景所设定的阈值,来判定哪些查询任务被认为是异常任务。
32、进一步优选的,左尾部ecdf概率和右尾部ecdf概率的计算公式如式(i)(ii)所示:
33、
34、式(i)、(ii)中,是输入入数据集的第i个样本的第j个特征值,l{·}是指示函数,n是样本数量,z是当前计算的数据点。
35、进一步优选的,高斯核函数k(x)如式(iii)所示:
36、
37、进一步优选的,在同一维度下通过高斯核函数,汇总所有数据点对当前目标点的贡献度,得到当前目标点的概率密度估计值,如式(iv)所示:
38、
39、式(iv)中,是通过sliverman法则确定的第j维度带宽参数,n是样本数量,是样本标准差。
40、进一步优选的,计算每个维度j下所有数据点的密度,选取密度最大点在[0,1]区间上的值作为尾部权重系数wj。
41、进一步优选的,对于每个样本xi,聚合尾部概率以获得异常分数o(xi);
42、聚合左尾部ecdf概率,获得异常分数oleft-only(xi),公式如式(v)所示:
43、
44、聚合右尾部ecdf概率,获得异常分数oright-only(xi),公式如式(vi)所示:
45、
46、根据尾部权重系数聚合尾部概率ow(xi),公式如式(vii)所示:
47、
48、进一步优选的,异常分数选取,如式(viii)所示:
49、oi=max{oleft-only(xi),oright-only(xi),ow(xi)}(viii)
50、式(viii)中,oi表示第i个样本的异常分数,异常分数oleft-only(xi)、oright-only(xi)、ow(xi)分别由上式(v)、(vi)、(vii)所得。
51、根据本发明优选的,获取异常查询任务的关联表,依据异常查询任务的关联表的表信息获取hive元数据服务中hdfs实际路径信息,并计算该hdfs实际路径下小文件所占比例,二次判定该异常查询任务的关联表是否为异常表;包括:
52、首先,每条查询任务都存在query字段,包括用户提交的sql语句,使用sqlparse库解析sql语句,提取其中涉及的关联表的表信息;
53、其次,利用表信息获取hudi存储在hive元数据服务中关于异常表的hdfs实际路径信息,根据路径信息递归列出所有文件名称及大小,并输出到csv文件中;
54、最后,筛选保留存储数据和版本最新的基本文件,小于hudi小文件阈值的文件被认定为小文件,统计小文件的数量和总文件的数量,计算小文件数量占总文件数量的比例,大于既定阈值则二次判定该关联表为异常表。
55、根据本发明优选的,将异常表的信息作为同步聚簇操作的依据,提交聚簇任务,将小文件合并为大文件;包括:
56、配置同步排期任务的参数,关闭同步聚簇排期和执行的自动触发,指定聚簇任务提交模式,设置小文件和大文件上限,提交同步执行任务,执行同步聚簇操作,将大量的小文件合并为极少的大文件。
57、一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现基于查询和元数据异常检测的数据湖仓聚簇方法的步骤。
58、一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现基于查询和元数据异常检测的数据湖仓聚簇方法的步骤。
59、基于查询和元数据异常检测的数据湖仓聚簇系统,包括:
60、数据采集与预处理模块:采集历史查询任务的各项性能指标,筛选其中部分相关性能指标作为初始数据集,并对初始数据集进行预处理操作;
61、ec-gkde算法异常判定:通过基于经验累积分布函数和高斯核密度估计方法的ec-gkde算法,对预处理操作后的数据集进行训练,得到所有查询任务的异常分数,对异常查询任务进行初次判定;
62、元数据信息异常判定模块:获取异常查询任务的关联表,依据异常查询任务的关联表的表信息获取hive元数据服务中hdfs实际路径信息,并计算该hdfs实际路径下小文件所占比例,二次判定该异常查询任务的关联表是否为异常表;
63、聚簇优化模块:将异常表的信息作为同步聚簇操作的依据,提交聚簇任务,将小文件合并为大文件。
64、本发明的有益效果为:
65、本发明提出了一种利用异常检测算法来分析presto引擎提供的历史查询任务的各项性能指标,标记可能为异常的查询任务,并进行二次判定是否为小文件原因而导致的异常,然后对异常表执行聚簇操作,将小文件合并为大小相近或相同的大文件,减少存储资源的开销,大大降低了查询任务需要消耗的时间;另外,使用本方法进行聚簇操作,可以控制聚簇操作执行的次数,减轻聚簇机制带来的并发更新不支持、增量查询不友好和集群资源浪费的问题。
技术研发人员:杨美红,王玺,王英龙,郭莹,赵志浩,孙博文,孟旭东
技术所有人:山东省计算中心(国家超级计算济南中心)
备 注:该技术已申请专利,仅供学习研究,如用于商业用途,请联系技术所有人。
声 明 :此信息收集于网络,如果你是此专利的发明人不想本网站收录此信息请联系我们,我们会在第一时间删除