友情链接:
在实际业务中,小文件现象出现频率并不低,当小文件过多时,将会导致内存占用高、集群不稳定,增加计算资源的开支等一系列问题,因此解决小文件问题迫在眉睫!!
由于篇幅限制,欲了解小文件出现背景,原因分析,为什么要治理小文件,小文件过多的危害等方面的内容,可参考:【小文件详解】不同阶段下的小文件治理最佳解决手段
在前面介绍小文件治理相关的文章中有提到,小文件治理无外乎三个阶段,存储端、计算端以及SQL端。其中存储端合并指的是说当表中有小文件或者小文件过多时,可以通过合并已经写入到存储的文件来治理,主要适用于以下原因导致的小文件问题:
但是,不同的表格式的合并方式不同。
本篇文章主要为读者介绍如何针对Holodesk表做合并。
Holodesk表与Torc表delta跟base文件产生的条件不一样,其所有的写操作都会在底层写入一个新的文件,而不是写入已有文件中。其中,insert操作生成新的base文件, update/delete操作生成新的delta文件。当进行频繁的小数据量的写入操作,会导致出现大量的 base/delta 文件,并且内容很少(KB 级别),因此为了避免出现IO开销大,影响性能,内存占用高等一系列问题,小文件合并功能至关重要。
Holodesk表的合并由compact service组件执行,需要单独安装。
常见的小文件合并功能是通过计算引擎服务来执行 Compact 任务的,可能会占用部分计算资源。新推出的Compact Service则在组件级别做了隔离,开启后不会影响到Quark的查询计算性能,合并效果更好。
Holodesk中的Compact类型主要分为三类:minor,major,full。
将一个base文件下的多个delta文件合并成一个新的delta文件,并apply到原有的base文件上:
命令:alter table <table_name> compact 'minor';
将一个base文件和它的所有delta文件合并成一个新的base文件:
命令:alter table <table_name> compact 'major';
将多个小的base文件合并成一个新的base文件,并且会一并删除delta文件:
命令:alter table <table_name> compact 'full';
安装了compact service,且服务正常的话,compact的任务由compactservice来做。
默认是 compact‘full’,用户可以根据业务特点,自定义小文件自动合并策略,平衡小文件数量和合并开销。
用于控制是否通过Compact Service 服务执行 Compact 任务。若设置为 false,则由计算引擎服务执行 Compact 任务。
引入版本:2.1 | 作用域:session、global |
默认值:true | 范围:true、false |
作用:Compact Service 是 ArgoDB 上的小文件合并专用服务。设置该参数TRUE,能够通过 Compact Service 进行小文件合并任务,小文件合并效果更好。
影响:设置该参数False,则通过计算引擎服务执行 Compact 任务,可能占用计算资源。
限制:如果 Compact Service 服务服务/异常,那么该参数失效,此时通过计算引擎服务执行 Compact 任务。
用于控制一个 Base 文件是否属于小文件,大于阈值的 Base 文件不是小文件,不会进行 Full Compact
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:134217728(128M) | 范围:单位Byte |
影响:阈值越大,越容易触发 Full Compact
用于控制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
用于控制 Major Compact 触发阈值,当 delta size/ base size 超过阈值时合并
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:0.2 | 范围:(0,1) |
作用:Major Compact 通过合并 Base 文件以及 Delta 文件来减少小文件数量
影响:阈值越小,越容易触发 Major Compact
用于控制 Minor Compact 触发阈值,当一个 Base 文件的 Delta 文件数量超过阈值时,触发 delta 文件之间的合并。
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:3 | 范围:[1,+∞) |
作用:Minor Compact 通过合并 Base 文件的多个 Delta 文件来减少小文件数量
影响:阈值越小,越容易触发 Minor Compact
此外,还有一些参数,建议减少以下 Compact Senice 服务的参数值,增加触发 Compact的频率,防止小文件个数太多影响读取的性能,也能防止文件生成的速率快过Compact 的性能,导致小文件个数超过 50000 ,实时写入任务失败。
参数 | 默认值(单位) | 说明 |
---|---|---|
holodesk.compact.init.interval | 60(s) | 设置 Init 线程 SLEEP 的时间 |
holodesk.compact.table.interval | 300(s) | 设置同一张表同一分区执行 Compact 的最低间隔 |
holodesk.compact.thread.max | 10 | 限制执行 COMPACT 的最大并发数 |
holodesk.compact.worker.interval | 20(s) | 设置 worker 线程运行周期中 SLEEP 的时间 |
holodesk.fullcompaction.single.task.filenum.threshold | 50(个) | 控制 fullcompact 单个 task 处理的小文件数量上限 |
通过 DBA Service 的存储 > 数据库菜单页面,我们可以查看各表当前的小文件数量。在特殊情况下,例如未合理设置自动合并策略或某个表因历史原因小文件数量过多,我们可以通过手动触发下述命令,立即执行小文件合并任务。
ArgoDB 执行 SQL 任务时,其 Task 数量与数据文件数量(base文件)有关,因此 full compact 能够通过减少数据文件数量来减少 Task 数。
接下来,我们介绍如何通过 DBA Service 查看表的小文件数量,找出异常表后并执行手动 Compact 操作。
6. 单击相关库名后,下拉查看对应的表名,随后登录 ArgoDB 数据库,在业务低峰期执行下述格式的命令,对指定的表执行合并小文件任务。
ALTER TABLE <table_name> compact "full"|"major"|"minor";
【示例】
对 demodb 数据库中的 customer 表执行 FULL COMPACT 操作:
ALTER TABLE demodb.customer COMPACT "full";
7. 操作完毕后,可单击顶部的实时标签,查找对应表名以查看小文件数量变化。
8. 检查自动 Compact 相关参数设置,使其覆盖本次出现的表未被自动 Compact 特例情况。
通过 DBA Service,您可以便捷地监控和管理 Compact 任务,为您的后续操作(例如调整 Compact 频率)提供数据支持。
注意:Compact 频率具体涉及的参数是 holodesk.compact.table.interval ,默认为 300 单位为秒。
但是在高频的数据 INSERT 场景下,可能出现 Compact 效率跟不上小文件生成的速率,此时可适当调小该值(例如 30)来提升执行频率。
6. 单击左侧导航栏的查询,可查看 Compact 任务的执行情况,例如任务类型、是否成功、耗时等信息。
通过查询语句的前缀可判断任务类型:
前缀为 Checking:表示为 Compact 检查操作,系统会定期检查表是否满足小文件触发条件。一旦满足,则会自动创建小文件合并任务。
前缀为 isCompact: true:表示 Compact 执行操作,执行小文件合并。
7. 单击左侧导航栏的存储 > 合并,基于阈值来查看是否存在 Compact 慢的表。
本案例中,我们选择最近 7 天中,Compact 任务执行超过 5 分钟,且表的小文件数量大于 10 的条件进行筛选,列出小文件数量最多的 3 个表,我们可以基于此信息判断是否存在较多 Compact 慢的表,然后调整 Compact 参数,例如频率、资源分配等。
① 分桶表:跨分桶不能进行合并
② 分区表:跨分区不能进行合并
以上就是当前Holodesk表如何合并小文件的全部内容,如需了解更多其他表格式的合并方式可参考:
友情链接:
在实际业务中,小文件现象出现频率并不低,当小文件过多时,将会导致内存占用高、集群不稳定,增加计算资源的开支等一系列问题,因此解决小文件问题迫在眉睫!!
由于篇幅限制,欲了解小文件出现背景,原因分析,为什么要治理小文件,小文件过多的危害等方面的内容,可参考:【小文件详解】不同阶段下的小文件治理最佳解决手段
在前面介绍小文件治理相关的文章中有提到,小文件治理无外乎三个阶段,存储端、计算端以及SQL端。其中存储端合并指的是说当表中有小文件或者小文件过多时,可以通过合并已经写入到存储的文件来治理,主要适用于以下原因导致的小文件问题:
但是,不同的表格式的合并方式不同。
本篇文章主要为读者介绍如何针对Holodesk表做合并。
Holodesk表与Torc表delta跟base文件产生的条件不一样,其所有的写操作都会在底层写入一个新的文件,而不是写入已有文件中。其中,insert操作生成新的base文件, update/delete操作生成新的delta文件。当进行频繁的小数据量的写入操作,会导致出现大量的 base/delta 文件,并且内容很少(KB 级别),因此为了避免出现IO开销大,影响性能,内存占用高等一系列问题,小文件合并功能至关重要。
Holodesk表的合并由compact service组件执行,需要单独安装。
常见的小文件合并功能是通过计算引擎服务来执行 Compact 任务的,可能会占用部分计算资源。新推出的Compact Service则在组件级别做了隔离,开启后不会影响到Quark的查询计算性能,合并效果更好。
Holodesk中的Compact类型主要分为三类:minor,major,full。
将一个base文件下的多个delta文件合并成一个新的delta文件,并apply到原有的base文件上:
命令:alter table <table_name> compact 'minor';
将一个base文件和它的所有delta文件合并成一个新的base文件:
命令:alter table <table_name> compact 'major';
将多个小的base文件合并成一个新的base文件,并且会一并删除delta文件:
命令:alter table <table_name> compact 'full';
安装了compact service,且服务正常的话,compact的任务由compactservice来做。
默认是 compact‘full’,用户可以根据业务特点,自定义小文件自动合并策略,平衡小文件数量和合并开销。
用于控制是否通过Compact Service 服务执行 Compact 任务。若设置为 false,则由计算引擎服务执行 Compact 任务。
引入版本:2.1 | 作用域:session、global |
默认值:true | 范围:true、false |
作用:Compact Service 是 ArgoDB 上的小文件合并专用服务。设置该参数TRUE,能够通过 Compact Service 进行小文件合并任务,小文件合并效果更好。
影响:设置该参数False,则通过计算引擎服务执行 Compact 任务,可能占用计算资源。
限制:如果 Compact Service 服务服务/异常,那么该参数失效,此时通过计算引擎服务执行 Compact 任务。
用于控制一个 Base 文件是否属于小文件,大于阈值的 Base 文件不是小文件,不会进行 Full Compact
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:134217728(128M) | 范围:单位Byte |
影响:阈值越大,越容易触发 Full Compact
用于控制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
用于控制 Major Compact 触发阈值,当 delta size/ base size 超过阈值时合并
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:0.2 | 范围:(0,1) |
作用:Major Compact 通过合并 Base 文件以及 Delta 文件来减少小文件数量
影响:阈值越小,越容易触发 Major Compact
用于控制 Minor Compact 触发阈值,当一个 Base 文件的 Delta 文件数量超过阈值时,触发 delta 文件之间的合并。
引入版本:2.1 | 作用域:global(通过 Manager 对 Compact Service 设置参数) |
默认值:3 | 范围:[1,+∞) |
作用:Minor Compact 通过合并 Base 文件的多个 Delta 文件来减少小文件数量
影响:阈值越小,越容易触发 Minor Compact
此外,还有一些参数,建议减少以下 Compact Senice 服务的参数值,增加触发 Compact的频率,防止小文件个数太多影响读取的性能,也能防止文件生成的速率快过Compact 的性能,导致小文件个数超过 50000 ,实时写入任务失败。
参数 | 默认值(单位) | 说明 |
---|---|---|
holodesk.compact.init.interval | 60(s) | 设置 Init 线程 SLEEP 的时间 |
holodesk.compact.table.interval | 300(s) | 设置同一张表同一分区执行 Compact 的最低间隔 |
holodesk.compact.thread.max | 10 | 限制执行 COMPACT 的最大并发数 |
holodesk.compact.worker.interval | 20(s) | 设置 worker 线程运行周期中 SLEEP 的时间 |
holodesk.fullcompaction.single.task.filenum.threshold | 50(个) | 控制 fullcompact 单个 task 处理的小文件数量上限 |
通过 DBA Service 的存储 > 数据库菜单页面,我们可以查看各表当前的小文件数量。在特殊情况下,例如未合理设置自动合并策略或某个表因历史原因小文件数量过多,我们可以通过手动触发下述命令,立即执行小文件合并任务。
ArgoDB 执行 SQL 任务时,其 Task 数量与数据文件数量(base文件)有关,因此 full compact 能够通过减少数据文件数量来减少 Task 数。
接下来,我们介绍如何通过 DBA Service 查看表的小文件数量,找出异常表后并执行手动 Compact 操作。
6. 单击相关库名后,下拉查看对应的表名,随后登录 ArgoDB 数据库,在业务低峰期执行下述格式的命令,对指定的表执行合并小文件任务。
ALTER TABLE <table_name> compact "full"|"major"|"minor";
【示例】
对 demodb 数据库中的 customer 表执行 FULL COMPACT 操作:
ALTER TABLE demodb.customer COMPACT "full";
7. 操作完毕后,可单击顶部的实时标签,查找对应表名以查看小文件数量变化。
8. 检查自动 Compact 相关参数设置,使其覆盖本次出现的表未被自动 Compact 特例情况。
通过 DBA Service,您可以便捷地监控和管理 Compact 任务,为您的后续操作(例如调整 Compact 频率)提供数据支持。
注意:Compact 频率具体涉及的参数是 holodesk.compact.table.interval ,默认为 300 单位为秒。
但是在高频的数据 INSERT 场景下,可能出现 Compact 效率跟不上小文件生成的速率,此时可适当调小该值(例如 30)来提升执行频率。
6. 单击左侧导航栏的查询,可查看 Compact 任务的执行情况,例如任务类型、是否成功、耗时等信息。
通过查询语句的前缀可判断任务类型:
前缀为 Checking:表示为 Compact 检查操作,系统会定期检查表是否满足小文件触发条件。一旦满足,则会自动创建小文件合并任务。
前缀为 isCompact: true:表示 Compact 执行操作,执行小文件合并。
7. 单击左侧导航栏的存储 > 合并,基于阈值来查看是否存在 Compact 慢的表。
本案例中,我们选择最近 7 天中,Compact 任务执行超过 5 分钟,且表的小文件数量大于 10 的条件进行筛选,列出小文件数量最多的 3 个表,我们可以基于此信息判断是否存在较多 Compact 慢的表,然后调整 Compact 参数,例如频率、资源分配等。
① 分桶表:跨分桶不能进行合并
② 分区表:跨分区不能进行合并
以上就是当前Holodesk表如何合并小文件的全部内容,如需了解更多其他表格式的合并方式可参考: