博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive merge(小文件合并)
阅读量:5266 次
发布时间:2019-06-14

本文共 1063 字,大约阅读时间需要 3 分钟。

当Hive的输入由非常多个小文件组成时。假设不涉及文件合并的话。那么每一个小文件都会启动一个map task。

假设文件过小。以至于map任务启动和初始化的时间大于逻辑处理的时间,会造成资源浪费。甚至发生OutOfMemoryError错误。

因此,当我们启动一个任务时,假设发现输入数据量小但任务数量多时。须要注意在Map前端进行输入小文件合并操作。
同理。向一个表写数据时,注意观察reduce数量。注意输出文件大小。
1、 Map输入小文件合并
#每一个Map处理的最大输入文件大小(256MB)
set mapred.max.split.size=256000000;  
#一个节点上split文件的最小值
set mapred.min.split.size.per.node=100000000; 
#一个交换机下split文件的最小值
set mapred.min.split.size.per.rack=100000000; 
#运行Map前进行小文件合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  
在开启了org.apache.hadoop.hive.ql.io.CombineHiveInputFormat 后,
一个data node节点上多个小文件会进行合并。合并文件数由mapred.max.split.size限制的大小决定。

mapred.min.split.size.per.node决定了多个data node上的文件是否须要合并
mapred.min.split.size.per.rack决定了多个交换机上的文件是否须要合并
2、输出文件合并
#在Map-Only的任务结束时就会合并小文件
set hive.merge.mapfiles = true;
#在MapR-educe的任务结束时合并小文件
set hive.merge.mapredfiles = true;(默觉得false)
#合并文件的大小
set hive.merge.size.per.task = 256*1000*1000;
#当输出文件的平均大小小于该值时。启动一个独立的map-reduce任务进行文件merge
set hive.merge.smallfiles.avgsize=16000000 ;

转载于:https://www.cnblogs.com/llguanli/p/6853142.html

你可能感兴趣的文章
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>