MaxCompute小文件问题优化方案

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介:

小文件背景知识

小文件定义

分布式文件系统按块Block存放,文件大小比块大小小的文件(默认块大小为64M),叫做小文件。

如何判断存在小文件数量多的问题

查看文件数量

desc extended + 表名

image

判断小文件数量多的标准

1、非分区表,表文件数达到1000个,文件平均大小小于64M
2、分区表: a) 单个分区文件数达到1000个,文件平均大小小于64M,
               b) 整个非分区表分区数达到五万 (系统限制为6万)

产生小文件数量多的主要原因

1、表设计不合理导致:分区多导致文件多,比如按天按小时按业务单元(假如有6个业务单元BU)分区,那么一年下来,分区数将会达到365246=52560。
2、在使用Tunnel、Datahub、Console等数据集成工具上传上传数据时,频繁Commit,写入表(表分区)使用不合理导致:每个分区存在多个文件,文件数达到几百上千,其中大多数是大小只有几 k 的小文件。
3、在使用insert into写入数据时过,几条数据就写入一次,并且频繁的写入。
4、Reduce过程中产生小文件过多。
5、Job执行过程中生成的各种临时文件、回收站保留的过期的文件过多。

注意:虽然在MaxCompute系统侧会自动做小文件合并的优化,但对于原因1、2、3需要客户采用合理的表分区设计和上传数据的方法才可以避免。

小文件数量过多产生的影响

MaxCompute处理单个大文件比处理多个小文件更有效率,小文件过多会影响整体的执行性能;小文件过多会给文件系统带来一定的压力,且影响空间的有效利用。MaxCompute对单个fuxi Instance可以处理的小文件数限制为120个,文件数过多影响fuxi instance数目,影响整体性能。

合并小文件命令

set odps.merge.max.filenumber.per.job=50000; --值默认为50000个;当分区数大于50000时需要调整,最大可到1000000万,大于1000000的提交多次merge
ALTER TABLE 表名[partition] MERGE SMALLFILES;

如何合并小文件

分区表:

如果您的表已经是分区表,请检查您的分区字段是否是可收敛的,如果分区数过多同样会影响计算性能,建议用日期做分区。
1、定期执行合并小文件命令;
2、如果是按日期建的分区,可以每天对前一天的分区数据用insert overwrite重新覆盖写入。
例如:

insert overwrite table tableA partition (ds='20181220')
select * from tableA where ds='20181220';

非分区表:

如果您的表是非分区表,您可以定期执行合并小文件命令来优化小文件问题,但强烈建议您设计成分区表:
1、先创建一个新的分区表,建议按日期做分区,合理设置生命周期,以方便进行历史数据回收;
2、把原非分区表的数据导入新的分区表;(建议先暂停原非分区表的实时写入业务)
例如:

create table sale_detail_patition like sale_detail;
alter table sale_detail_insert add partition(sale_date='201812120', region='china');
insert overwrite table sale_detail_patition partition (sale_date='20181220', region='china')
select * from sale_detail;

3、修改上下游业务:入库程序改成写入新分区表,查询作业改成从新分区表中查询;
4、新分区表完成数据迁移和验证后,删除原分区表。

注意:如果您使用insert overwrite重新写入全量数据合并小文件时,请注意一定不要同时存在insert overwrite和insert into同时存在的情况,否则有丢失数据的风险。

如何避免产生小文件

优化表设计

合理设计表分区,分区字段是尽量是可收敛或可管理的,如果分区数过多同样会影响计算性能,建议用日期做分区,并合理设置表的生命周期,以方便对历史数据回收,也可控制您的存储成本。
参考文章:《MaxCompute 表(Table)设计规范》《MaxCompute表设计最佳实践》

避免使用各种数据集成工具产生小文件

1、Tunnel->MaxCompute
使用Tunnel上传数据时避免频繁commit,尽量保证每次提交的DataSize大于64M,请参考《离线批量数据通道Tunnel的最佳实践及常见问题》

2、Datahub->MaxCompute
如果用Datahub产生小文件,建议合理申请shard,可以根据topic的Throughput合理做shard合并,减少shard数量。可以根据topic的Throughput观察数据流量变化,适当调大数据写入的间隔时间。

申请Datahub shard数目的策略(申请过多的datahub shard将会产生小文件问题)
1)默认吞吐量单个shard是1MB/s,可以按照这个分配实际的shard数目(可以在此基础上多加几个);
2)同步MaxCompute的逻辑是每个shard有一个单独的task(满足5分钟或者64MB会commit一次),默认设置5分钟是为了尽快能在MaxCompute查到数据。如果是按照小时建partition,那个一个shard每个小时有12个文件。如果这个时候数据量很少,但是shard很多,在MaxCompute里面就会很多小文件(shard*12/hour)。所以不要过多的分配shard,按需分配。

参考建议:​​如果流量是5M/s,那么就申请5个shard,为预防流量峰值预留20%的Buffer,可以申请6个shard。

3、DataX->MaxCompute
因为datax也是封装了tunnel的SDK来写入MaxCompute的,因此,建议您在配置ODPSWriter的时候,把blockSizeInMB这个参数不要设置太小,最好是64M以上。

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
2月前
|
存储 分布式计算 大数据
MaxCompute聚簇优化推荐功能发布,单日节省2PB Shuffle、7000+CU!
MaxCompute全新推出了聚簇优化推荐功能。该功能基于 31 天历史运行数据,每日自动输出全局最优 Hash Cluster Key,对于10 GB以上的大型Shuffle场景,这一功能将直接带来显著的成本优化。
162 3
|
2月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
1月前
|
存储 SQL 分布式计算
MaxCompute 聚簇优化推荐原理
基于历史查询智能推荐Clustered表,显著降低计算成本,提升数仓性能。
183 4
MaxCompute 聚簇优化推荐原理
|
1月前
|
存储 并行计算 算法
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
|
1月前
|
大数据 数据挖掘 定位技术
买房不是拍脑袋:大数据教你优化房地产投资策略
买房不是拍脑袋:大数据教你优化房地产投资策略
97 2
|
2月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
2月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在生物信息学基因功能预测中的优化与应用(223)
本文探讨了Java大数据与机器学习模型在生物信息学中基因功能预测的优化与应用。通过高效的数据处理能力和智能算法,提升基因功能预测的准确性与效率,助力医学与农业发展。
|
2月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据在智能物流运输车辆智能调度与路径优化中的技术实现(218)
本文深入探讨了Java大数据技术在智能物流运输中车辆调度与路径优化的应用。通过遗传算法实现车辆资源的智能调度,结合实时路况数据和强化学习算法进行动态路径优化,有效提升了物流效率与客户满意度。以京东物流和顺丰速运的实际案例为支撑,展示了Java大数据在解决行业痛点问题中的强大能力,为物流行业的智能化转型提供了切实可行的技术方案。
|
2月前
|
机器学习/深度学习 数据采集 搜索推荐
你以为是“说走就走”?其实是“算好才走”:大数据是怎么悄悄优化旅游体验的?
你以为是“说走就走”?其实是“算好才走”:大数据是怎么悄悄优化旅游体验的?
69 0
|
3月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。

相关产品

  • 云原生大数据计算服务 MaxCompute