新闻详情

新闻详情

首页 / 资讯中心 / 详情

hadoop-减少小文件产生

发布时间:2026/10/1 2:57:51来源:尧图网络
hadoop-减少小文件产生
hive减少小文件、合并小文件namenode的内存使用很高时可能是小文件占比高如果内存是正常上下波动的说明内存没问题可以减少小文件会降低元数据占用的内存以下参数可用于hive版本为2.x以及3.x一、历史的小文件合并1、执行 ALTER TABLE tablename PARTITION (dtxxxx-xx-xx) CONCATENATE;如果集群有上千万张表可以想办法把这些小文件的分区导出然后让ai根据表分区批量生成合并sql2、重写表的方式:针对已存在的hive表数据的小文件合并可以通过 INSERT OVERWRITE 重写整张表/分区 来实现小文件合并前置设置真正决定文件数的参数 需要在执行前设置控制 Reduce 数SET hive.exec.reducers.bytes.per.reducer256000000; -- 每个reducer处理约256MBSET hive.exec.reducers.max100; -- reducer上限-- 或直接指定SET mapreduce.job.reduces10; -- 期望生成约10个文件1针对非分区表插入语句INSERT OVERWRITE TABLE db_name.tab_nameSELECT *FROM db_name.tab_nameSORT BY 1;SORT BY 是分区内排序每个 Reduce 内部有序不保证全局有序开销小1 表示按 SELECT 列表中的第 1 列排序这里加排序的真正目的不是排序本身而是强制触发 Reduce 阶段。如果纯 SELECT * 没有聚合/排序Hive 可能走 INSERT ... SELECT 的 map-only 作业无 Reduce那样会一个 Map 一个文件反而不会合并甚至文件数不变或更多。加上 SORT BY 后必然有 Reduce文件数 Reduce 数。若表有分区列非分区表用 * 没问题但如果误用于分区表分区列会被当成普通列写出导致数据错位2针对分区表INSERT OVERWRITE TABLE db_name.tab_namePARTITION (part_col part_value)SELECT col1, col2, ..., colnFROM db_name.tab_nameWHERE part_col part_valueSORT BY 1;PARTITION 子句指定写回的目标分区动态/静态分区WHERE 子句限定只读取该分区的数据二者配合做到只重写单个分区不影响其他分区SELECT col1, col2, ..., coln 不含分区列分区表的分区列是元数据不写在 SELECT 列列表里若写成 SELECT * 会把分区列也当普通列读出来再和 PARTITION 指定的分区值冲突/重复导致数据错误所以分区表必须显式列出非分区列。触发 ReduceSORT BY 1多分区需循环该写法一次只处理一个分区值若有多个分区需对每个 part_value 重复执行脚本循环或动态分区INSERT OVERWRITE TABLE db_name.tab_namePARTITION (part_col)SELECT col1, col2, ..., coln, part_col -- 动态分区需把分区列放最后FROM db_name.tab_nameDISTRIBUTE BY part_colSORT BY part_col, 1;二、针对运行的hive作业输出的新小文件合并设置输出文件合并可以减少文件个数也能达到减少map个数的目的。1、不同程序开启的参数不同1如果hive on mr的程序只有maptask将MapTask产生的所有小文件进行合并默认trueset hive.merge.mapfilestrue;2 如果hive on mr的程序有Map和Reduce Task将ReduceTask产生的所有小文件进行合并默认falseset hive.merge.mapredfilestrue;4每一个合并的文件的大小默认256000000单位byteset hive.merge.size.per.task256000000;5当输出文件的平均大小小于该值时启动一个独立的map-reduce任务进行文件merge默认16000000单位byteSET hive.merge.smallfiles.avgsize 16000000;6map端优化set hive.input.formatorg.apache.hadoop.hive.ql.io.CombineHiveInputFormat;The default input format. Set this to HiveInputFormat if you encounter problems with CombineHiveInputFormat.3如果是hive on spark的程序将spark 输出端产生的所以小文件进行合并默认falseset hive.merge.sparkfilestrue;8hive on tez的程序将tez输出文件合并默认falseset hive.merge.tezfilestrue;以上参数的介绍查看hive官网https://hive.apache.org/docs/latest/user/configuration-properties/TezConfiguration 类配置参考https://tez.apache.org/releases/0.10.5/tez-api-javadocs/configs/TezConfiguration.htmlflink侧减少小文件数量auto-compaction true自动合并小文件开关默认是 false显式打开compaction.file-size 128mb合并目标文件大小sink.rolling-policy.file-size 128MB单文件滚动阈值sink.rolling-policy.rollover-interval 30 min文件最长写入时间参考下官网配置参数https://nightlies.apache.org/flink/flink-docs-stable/docs/connectors/table/filesystem/
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于Django的IT招聘数据分析与岗位推荐系统全流程解析 2026/10/1 15:00:42

基于Django的IT招聘数据分析与岗位推荐系统全流程解析

如果你正在为毕业设计选题发愁,我真心建议你认真考虑“基于Django的IT行业招聘数据分析与岗位推荐系统”这个方向。我自己从拿到题目到把核心功能完整跑通,大概花了三周时间,前面两周基本都在跟数据清洗和可视化较劲,最后一周死磕…

阅读更多 →
SoC模块验证规格说明书:从功能点到UVM落地的工程实践 2026/10/1 15:00:42

SoC模块验证规格说明书:从功能点到UVM落地的工程实践

干验证这一行十几年,踩过最大的坑往往不是代码写不出来,而是项目开工前没把“要验什么”想清楚。SoC 模块验证尤其如此——今天手机、汽车、IoT 设备里的芯片几乎全是 SoC,模块数量动辄几十上百,每个模块挂在总线上,中…

阅读更多 →
Vibe Coding与嵌入式开发:AI辅助的真相与实践指南 2026/10/1 15:00:42

Vibe Coding与嵌入式开发:AI辅助的真相与实践指南

别急着让AI接管你的单片机,先聊聊Vibe Coding和嵌入式开发的真相 最近圈子里“Vibe Coding”这个词热度高得吓人。特斯拉前AI负责人Andrej Karpathy提了一嘴“找个舒服的环境,听点音乐,像萨满跳大神一样跟LLM对话,让AI把代码写出来…

阅读更多 →
ARM工业计算机BL440:通信、实时控制与边缘AI一体化实战 2026/10/1 15:00:42

ARM工业计算机BL440:通信、实时控制与边缘AI一体化实战

在工业现场摸爬滚打这些年,我试过不少方案组合:PLC负责控制、边缘网关做数据采集、上位机跑视觉算法,一套系统下来光是设备联调和协议转换就够喝一壶的。后来接触BL440这类基于ARM架构的工业计算机,发现它把多路工业通信、实时控制…

阅读更多 →
ARM工业计算机BL440:融合多路通信、实时控制与边缘AI的一体化平台 2026/10/1 15:00:42

ARM工业计算机BL440:融合多路通信、实时控制与边缘AI的一体化平台

1. BL440到底是什么?先把这个名字拆开看这几年跑工业现场,你会发现一个很明显的趋势:原来一台设备只管一件事的玩法越来越撑不住了。现场既要采集几十台仪表的Modbus数据,又要跑运动控制逻辑,还要顺带做一点图像判断—…

阅读更多 →
AI-Infra实战:从GPU调度到模型上线的工程化指南 2026/10/1 15:00:35

AI-Infra实战:从GPU调度到模型上线的工程化指南

1. 从“调参侠”到“基建工”:AI-Infra到底在修什么路干了三年算法,模型结构改了几十版,指标涨了不到两个点。直到有次线上推理服务崩了,老板站在身后看我手忙脚乱地重启容器,丢下一句:“你这模型再准&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉