表治理-Iceberg小文件合并测试
总结
|
指标
|
合并前
|
合并后(因测试中多次合并,数据会偏多)
|
|---|---|---|
| 查询速度 | 246秒 | 13秒 |
| 表总大小 | 9.2G | 26.4G |
| 单个文件大小 | 1-25MB | 60MB左右 |
| metadata目录文件数 | 37 | 75 |
| data目录文件数 | 900 | 1501 |
小文件合并后历史版本数据不会自动清理,需要做快照清理
快照清理参考:Iceberg过期快照清理
一、合并前性能统计
1、查询速度(4分钟多)
select count(1) from order_info1;

2、表总大小
hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1

3、单个文件大小例子

4、文件数量
hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1/data
路径:/user/hive/warehouse/data_lake_ods.db/order_info1/data
文件数:900
路径:/user/hive/warehouse/data_lake_ods.db/order_info1/metadata
文件数:37
二、合并任务资源使用情况
1、处理数据表中已删除的数据(仅超1亿大表才执行)
如果是大表,则先执行max-file-group-size-bytes=1处理删除文件。max-concurrent-file-group-rewrites设置为maxExecutors个数最快
CALL iceberg_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
'max-concurrent-file-group-rewrites','15',
'max-file-group-size-bytes','1',
'rewrite-all','true'
)
);
|
|
任务使用的10并行度,单executor执行一个任务,大概20秒左右处理一个数据文件

共计2.8亿条数据表,任务执行时长15分钟左右。

2、开始合并小文件(分组大小1GB,生成文件64MB)
CALL iceberg_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
'max-concurrent-file-group-rewrites','15',
'max-file-group-size-bytes','1073741824',
'target-file-size-bytes','67108864',
'rewrite-all','true'
)
);
合并方法2大宽表直接合并:
CALL spark_catalog.system.rewrite_data_files(
table => 'data_lake_ods.order_info1',
options => map(
'partial-progress.enabled', 'true',
'rewrite-job-order', 'bytes-asc',
'partial-progress.max-commits', '10000',
'max-file-group-size-bytes', '1073741824',
'rewrite-all','true'
)
);
合并小文件执行时长2分钟左右

官网文档:https://iceberg.apache.org/docs/latest/spark-procedures/
其它优化参数
(1)rewrite-job-order=bytes-asc说明:根据该值强制指定重写作业顺序 bytes-asc:则首先重写最小的作业组。 bytes-desc:则首先重写最大的作业组。 files-asc:则首先重写文件最少的作业组。 files-desc:则首先重写文件最多的作业组。 none(默认):则按照计划的顺序重写作业组(无特定顺序)。(2)target-file-size-bytes说明:目标输出文件大小默认值:536870912(512 MB)可以修改成:67108864(64MB) |
三、合并后性能统计
1、查询速度(13秒)

2、表总大小(26.4G)

3、单个文件大小例子

4、文件数量
hdfs dfs -du -h /user/hive/warehouse/data_lake_ods.db/order_info1/data
路径:/user/hive/warehouse/data_lake_ods.db/order_info1/data
文件数:1501
路径:/user/hive/warehouse/data_lake_ods.db/order_info1/metadata
文件数:75
参考文章:
1、Spark 合并 Iceberg 小文件内存溢出问题定位和解决方案
https://xie.infoq.cn/article/50259945d7663d7194a5e2763
2、通过flink、spark优化iceberg表小文件项目
表治理-Iceberg小文件合并测试的更多相关文章
- iceberg合并小文件冲突测试
基于iceberg的master分支的9b6b5e0d2(2022-2-9). 参数说明 1.PARTIAL_PROGRESS_ENABLED(partial-progress.enabled) 默认 ...
- hive小文件合并设置参数
Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量.但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越小.而且这些 ...
- Hadoop经典案例(排序&Join&topk&小文件合并)
①自定义按某列排序,二次排序 writablecomparable中的compareto方法 ②topk a利用treemap,缺点:map中的key不允许重复:https://blog.csdn.n ...
- Hive merge(小文件合并)
当Hive的输入由非常多个小文件组成时.假设不涉及文件合并的话.那么每一个小文件都会启动一个map task. 假设文件过小.以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费.甚至 ...
- Hadoop MapReduce编程 API入门系列之小文件合并(二十九)
不多说,直接上代码. Hadoop 自身提供了几种机制来解决相关的问题,包括HAR,SequeueFile和CombineFileInputFormat. Hadoop 自身提供的几种小文件合并机制 ...
- HDFS操作及小文件合并
小文件合并是针对文件上传到HDFS之前 这些文件夹里面都是小文件 参考代码 package com.gong.hadoop2; import java.io.IOException; import j ...
- MR案例:小文件合并SequeceFile
SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.可以使用这种文件对小文件合并,即将文件名作为key,文件 ...
- 第3节 mapreduce高级:5、6、通过inputformat实现小文件合并成为sequenceFile格式
1.1 需求 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案 1.2 分析 小文件的优化无非以下几种方式: 1. 在数据 ...
- hive优化之小文件合并
文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果文件来消除这样的影响: set hive.merge.mapfiles = true ##在 map on ...
- Hadoop实战项目:小文件合并
项目背景 在实际项目中,输入数据往往是由许多小文件组成,这里的小文件是指小于HDFS系统Block大小的文件(默认128M),早期的版本所定义的小文件是64M,这里的hadoop-2.2.0所定义的小 ...
随机推荐
- ClickHouse之物化MySQL
Creates ClickHouse database with all the tables existing in MySQL, and all the data in those tables. ...
- php调试工具之firePHP
让PHP可以像js一样利用浏览器的控制台调试代码 ------- FirePHP(http://www.firephp.org/) 1. 安装FirePHP插件 在Chrome浏览器的应用商店中,搜 ...
- Mybatis【10】-- Mybatis属性名和查询字段名不同怎么做?
很多时候我们有这样的需求,数据库的字段名与实体类的属性名不一致,这个时候我们需要怎么做呢?有两种解决方案,第一种:直接在查询的时候使用别名,将别名设置成与实体类的属性名一致.第二种:使用resultT ...
- jQuery 国内 CDN
eShop 中使用了 cdnjs ,由于网络问题,导致编译失败 可以使用如下国内链接: https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.mi ...
- Qt通用方法及类库9
函数名 //字节数组转Ascii字符串 static QString byteArrayToAsciiStr(const QByteArray &data); //16进制字符串转字节数组 s ...
- Raspberry pi 上部署调试.Net的IoT程序
树莓派(Raspberry pi)是一款基于ARM 架构的单板计算机(Single Board Computer),可以运行各种 Linux 操作系统,其官方推荐使用的 Raspberry Pi OS ...
- 【狂神说Java】Java零基础学习笔记-JavaSE总结
[狂神说Java]Java零基础学习笔记-JavaSE总结 JavaSE总结: -完结-撒花- [[狂神说Java]Java零基础学习视频通俗易懂]https://www.bilibili.com/v ...
- JMeter JSR223 Sampler 教程:性能测试的魔法棒
JMeter JSR223 Sampler 教程:性能测试的魔法棒 宝子们,今天咱要深入探索 JMeter 里超厉害的 JSR223 Sampler,它就像是一把万能钥匙,能打开性能测试的各种奇妙大门 ...
- vue3-openlayers基础知识简介
vue3-openlayers基础知识简介 OpenLayers 3 Primer openlayers6:入门基础(一) openlayers 入门教程 一.基础概念介绍 地图(Map) OpenL ...
- Centos-基础配置
切换下载源到阿里云 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载新的 Cent ...