表治理-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所定义的小 ...
随机推荐
- How to display XML in a JTree using JDOM
How to display XML in a JTree using JDOM This brief tutorial will explain how to use Java to make an ...
- python常用模块汇总
os模块 os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作目 ...
- MySQL原理简介—11.优化案例介绍
大纲 1.禁止或改写SQL避免自动半连接优化 2.指定索引避免按聚簇索引全表扫描大表 3.按聚簇索引扫描小表减少回表次数 4.避免产生长事务长时间执行 1.禁止或改写SQL避免自动半连接优化 (1)业 ...
- MySQL底层概述—7.优化原则及慢查询
大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模 ...
- Prime1_解法一:cms渗透 & 内核漏洞提权
Prime1_解法一:cms渗透 & 内核漏洞提权 目录 Prime1_解法一:cms渗透 & 内核漏洞提权 信息收集 主机发现 nmap扫描 tcp扫描 tcp详细扫描22,80端口 ...
- Linux下TCP/IP编程--TCP实战
之前尝试过windows下的简单TCP客户端服务器编写,这次尝试下一下Linux环境下的TCP 客户端代码 #include <stdio.h> #include <stdlib.h ...
- Mapstruct使用时报Unknown property xxx in result type xxx. Did you mean null
0.背景 使用mapstruct时出现: Unknown property "xxx" in result type xxx. Did you mean "null&qu ...
- MySQL启动时自动创建数据库
一.背景及分析 MysqL容器启动时,会自动创建一些必要的数据库,比如MysqL,这是官方默认的做法.但是,在实际中,还需要让MysqL自动创建我们自定义的数据库.本文就此应用场合进行探究. 一般的做 ...
- git同步远程仓库的所有分支
git clone克隆远程仓库默认是只克隆master分支,当想把远程仓库上的所有的分支都克隆下来的话,有以下几种方法. 使用远程仓库github上的LSMLIB仓库为例.该仓库在github上一共有 ...
- [转]OpenCV三角测量重建triangulatePoints原理解析
opencv源代码注释 附上opencv三角测量函数的主要代码和注释 cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* pr ...