ArgoDB Holodesk表格式对应的小文件合并

背景介绍

Holodesk表与Torc表delta跟base文件产生的条件不一样,其所有的写操作都会在底层写入一个新的文件,而不是写入已有文件中。其中,insert操作生成新的base文件, update/delete操作生成新的delta文件。当进行频繁的小数据量的写入操作,会导致出现大量的 base/delta 文件,并且内容很少(KB 级别),因此为了避免出现IO开销大,影响性能,内存占用高等一系列问题,小文件合并功能至关重要。

Holodesk表的合并由compact service组件执行,需要单独安装。

常见的小文件合并功能是通过计算引擎服务来执行 Compact 任务的,可能会占用部分计算资源。新推出的Compact Service则在组件级别做了隔离,开启后不会影响到Quark的查询计算性能,合并效果更好。

Compact类型

Holodesk中的Compact类型主要分为三类:minor,major,full。

Minor

将一个base文件下的多个delta文件合并成一个新的delta文件,并apply到原有的base文件上:


命令:alter table <table_name> compact 'minor';

image.png

Major

将一个base文件和它的所有delta文件合并成一个新的base文件:


命令:alter table <table_name> compact 'major';

image.png

Full

将多个小的base文件合并成一个新的base文件,并且会一并删除delta文件:


命令:alter table <table_name> compact 'full';

image.png

执行方式

A. 同步compact(自动)

安装了compact service,且服务正常的话,compact的任务由compactservice来做。

默认是 compact‘full’,用户可以根据业务特点,自定义小文件自动合并策略,平衡小文件数量和合并开销。

  • holodesk.compaction.trigger.enabled

用于控制是否通过Compact Service 服务执行 Compact 任务。若设置为 false,则由计算引擎服务执行 Compact 任务。

引入版本:2.1作用域:session、global
默认值:true范围:true、false

作用:Compact Service 是 ArgoDB 上的小文件合并专用服务。设置该参数TRUE,能够通过 Compact Service 进行小文件合并任务,小文件合并效果更好。

影响:设置该参数False,则通过计算引擎服务执行 Compact 任务,可能占用计算资源。

限制:如果 Compact Service 服务服务/异常,那么该参数失效,此时通过计算引擎服务执行 Compact 任务。

  • holodesk.fullcompaction.filesize.threshold

用于控制一个 Base 文件是否属于小文件,大于阈值的 Base 文件不是小文件,不会进行 Full Compact

引入版本:2.1作用域:global(通过 Manager 对 Compact Service 设置参数)
默认值:134217728(128M)范围:单位Byte

影响:阈值越大,越容易触发 Full Compact

  • holodesk.fullcompaction.filenum.threshold

用于控制full compact触发阈值,当小文件数量(block)超过阈值时合并

a. 如果是非分区分桶表,那么相同 tablet 上的小文件超过阈值时合并

b. 如果是分区表,那么相同分区,相同 tablet 的小文件超过阈值时合并

c. 如果是分桶表,那么相同bucket,相同 tablet 的小文件超过阈值时合并

d. 如果是分区分桶表,那么相同分区、相同 bucket、相同 tablet 的小文件超过阈值时合并

引入版本:2.1作用域:global(通过 Manager 对 Compact Service 设置参数)
默认值:3范围:[1,+∞)

作用:full compaction 通过合并 base 文件来减少小文件数量

影响:阈值越小,越容易触发 Full Compact

  • holodesk.majorcompaction.delta.filesize.ratio

用于控制 Major Compact 触发阈值,当 delta size/ base size 超过阈值时合并

引入版本:2.1作用域:global(通过 Manager 对 Compact Service 设置参数)
默认值:0.2范围:(0,1)

作用:Major Compact 通过合并 Base 文件以及 Delta 文件来减少小文件数量

影响:阈值越小,越容易触发 Major Compact

  • holodesk.minorcompaction.delta.filenum.threshold

用于控制 Minor Compact 触发阈值,当一个 Base 文件的 Delta 文件数量超过阈值时,触发 delta 文件之间的合并。

引入版本:2.1作用域:global(通过 Manager 对 Compact Service 设置参数)
默认值:3范围:[1,+∞)

作用:Minor Compact 通过合并 Base 文件的多个 Delta 文件来减少小文件数量

影响:阈值越小,越容易触发 Minor Compact

B. 异步compact(手动)

通过 DBA Service 的存储 > 数据库菜单页面,我们可以查看各表当前的小文件数量。在特殊情况下,例如未合理设置自动合并策略或某个表因历史原因小文件数量过多,我们可以通过手动触发下述命令,立即执行小文件合并任务。

  • alter table <table_name> compact ‘full’;
  • alter table <table_name> compact ‘major’;
  • alter table <table_name> compact ‘minor’;

ArgoDB 执行 SQL 任务时,其 Task 数量与数据文件数量(base文件)有关,因此 full compact 能够通过减少数据文件数量来减少 Task 数。

接下来,我们介绍如何通过 DBA Service 查看表的小文件数量,找出异常表后并执行手动 Compact 操作。

  1. 登录 Transwarp Manager 平台。
  2. 选择仪表盘 > 集群页面,单击 DBAService 进入服务详情界面。
  3. 选择角色,然后查看 DBA Service Server 角色网址并访问。
  4. 输入账号和密码,填写验证码后进入 DBAService 首页,然后单击对应的 Qaruk 服务。
  5. 在左侧导航栏,单击存储 > 数据库,然后在统计标签页筛选表类型(如 Holodesk),并基于小文件数量排序,查看是否存在小文件异常多的表。

image.png

6. 单击相关库名后,下拉查看对应的表名,随后登录 ArgoDB 数据库,在业务低峰期执行下述格式的命令,对指定的表执行合并小文件任务。


ALTER TABLE <table_name> compact "full"|"major"|"minor";
  • full:将 base 文件合并成一个 base 文件,并且删除无用的 delta 文件
  • major:将 base 及其 delta 文件合并,生成一个新的 base 文件
  • minor:将 base 的 delta 文件合并,生成一个新的 delta 文件

【示例】
对 demodb 数据库中的 customer 表执行 FULL COMPACT 操作:
ALTER TABLE demodb.customer COMPACT "full";

7. 操作完毕后,可单击顶部的实时标签,查找对应表名以查看小文件数量变化。

8. 检查自动 Compact 相关参数设置,使其覆盖本次出现的表未被自动 Compact 特例情况。

管理 Compact 任务

通过 DBA Service,您可以便捷地监控和管理 Compact 任务,为您的后续操作(例如调整 Compact 频率)提供数据支持。

  1. 登录 Transwarp Manager 平台。
  2. 选择仪表盘 > 集群页面,单击 DBAService 进入服务详情界面。
  3. 选择角色,然后查看 DBA Service Server 角色网址并访问。
  4. 输入账号和密码,填写验证码后进入 DBAService 首页。
  5. 单击 Compact Service 卡片。

image.png

6. 单击左侧导航栏的查询,可查看 Compact 任务的执行情况,例如任务类型、是否成功、耗时等信息。

image.png


通过查询语句的前缀可判断任务类型:
前缀为 Checking:表示为 Compact 检查操作,系统会定期检查表是否满足小文件触发条件。一旦满足,则会自动创建小文件合并任务。
前缀为 isCompact: true:表示 Compact 执行操作,执行小文件合并。

7. 单击左侧导航栏的存储 > 合并,基于阈值来查看是否存在 Compact 慢的表。

本案例中,我们选择最近 7 天中,Compact 任务执行超过 5 分钟,且表的小文件数量大于 10 的条件进行筛选,列出小文件数量最多的 3 个表,我们可以基于此信息判断是否存在较多 Compact 慢的表,然后调整 Compact 参数,例如频率、资源分配等。

image.png

注意事项

① 分桶表:跨分桶不能进行合并

② 分区表:跨分区不能进行合并

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ྒߌྐ༏॓࠯čഈݚĎႵཋ܄ඳ Transwarp Inceptor ࠯ඌϢ௃඀ 2014 TRANSWARP 星环科技 Hadoop由HDFS和Map/Reduce组成。HDFS仍然是一个高可扩展的分布文件系统,是大数据软件栈的基 石。Map/Reduce在处理PB级别的数据时,仍然具有高容错性、高吞吐量的特点。但由于复杂的工作流通常需 要多个阶段的Map/Reduce任务,而Map/Reduce的输入输出必须经过低速磁盘,导致运行复杂迭代任务时非常 低效,因此不适合对延时要求高的交互分析或者需要复杂迭代的数据分析任务。而Spark是一个基于内存计算 的开源集群计算系统,目的是更快速地进行数据分析。 Spark 提供了与Hadoop Map/Reduce 相似的分布计 算框架,但却有基于内存和迭代优化的设计,因此在交互数据分析和数据挖掘工作负载中现更优秀。 随着对大数据技术研究的深入,Spark开源生态系统得到了快速发展,已成为大数据领域最活跃的开源项目 之一。Spark之所以吸引如此多的关注,究其原因主要是因为Spark具有以下三方面特征: 虽然Spark具有以上三大优点,但从目前Spark的发展和应用现状来看,Spark自身也存在很多缺陷,主要 包括以下几个方面: 因此,尽管Spark正活跃在众多大数据公司的技术体系中,但是如果Spark本身的这些缺陷得不到及时处理, 将会严重影响Spark的普及和发展。星环科技有针对性的开发,推出了一系列关于Spark的大数据平台技术方案, 这些难题便迎刃而解。 星环科技推出的基于Spark的交互分析引擎Inceptor,从下往上分三层架构,最底层是分布缓存( Transwarp Holodesk),可建在内存或者SSD上;中间层是Apache Spark计算引擎层;最上层包括SQL 2003 和PL/SQL编译器、统计算法库和机器学习算法库,提供完整的R语言访问接口。 高性能:Spark对分布的数据集进行抽象,创新地提出RDD(Resilient Distributed Dataset)的概念,所有的统 计分析任务被翻译成对RDD的若干基本操作组成的有向无环图(DAG)。RDD可以被驻留在内存中,后续的任 务可以直接读取内存中的数据;同时分析DAG中任务之间的依赖性可以把相邻的任务合并,从而减少了大量 的中间结果输出,极大减少了磁盘I/O,使得复杂数据分析任务更高效。从这个意义上来说,如果任务够复杂, 迭代次数够多,Spark比Map/Reduce快一到两个数量级。 高灵活性:Spark是一个灵活的计算框架,适合做批处理、工作流、交互分析、迭代机器学习、流处理等 不同类型的应用,因此Spark可以成为一个用途广泛的计算引擎,并在未来取代Map/Reduce的地位。 与Hadoop生态完美融合:Spark可以与Hadoop生态系统的很多组件互操作。Spark可以运行在新一代资源管 理框架YARN上,它还可以读取已有的存放在Hadoop上的数据,这是个非常大的优势。 稳定性:由于代码质量问题,Spark长时间运行会经常出错,在架构方面,由于大量数据被缓存在内存中, Java垃圾回收缓慢的现象严重,导致Spark的性能不稳定,在复杂场景SQL的性能甚至不如现有Map/Reduce。 不能处理大数据:单台机器处理数据过大,或者由于数据倾斜导致中间结果超过内存大小时,常常出现内存 不够或者无法运行得出结果。但是Map/Reduce计算框架却可以处理大数据,因此在这方面Spark不如Map/Reduce 有效。 不支持复杂的SQL统计:目前Spark支持的SQL语法的完整程度还不能应用在复杂数据分析中。在可管理性 方面,Spark与YARN的结合不完善,这就在用户使用过程中埋下隐患,易出现各种难题。 基于Spark的交互分析引擎 技术解析 基于Spark的交互分析引擎技术解析 2014 TRANSWARP 星环科技 Transwarp Inceptor对Spark进行了大量的改进,具有高性能、稳定性好、功能丰富、易管理等特征,可以 切实解决Spark本身存在的难题。具体而言,星环Inceptor具有以下几点优势: 高性能 首先,支持高性能Apache Spark作为缺省执行引擎,可比原生的Hadoop Map/Reduce快;其次,通过建立 独立于Spark的分布缓存层,可以有效防止GC的影响,消除Spark的性能波动,同时在列缓存上实现 索引机制,进一步提高了执行性能;再次,在SQL执行计划优化方面,实现了基于代价的优化器(cost based optimizer)以及多种优化策略,性能可以比原生Spark快数倍;最后通过全新的方法解决数据倾斜或者数据量过 大的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值