测试代码:

package cn.toto.bigdata.combinefile;import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/*** 当遇到小文件处理时,每个文件会被当成一个split,那么资源消耗非常大,hadoop支持将小文件合并后当成一个切片处理。(默认)*/
public class SmallFileCombiner {static class SmallFileCombinerMapper extends Mapper<LongWritable, Text, Text, NullWritable>{NullWritable v = NullWritable.get();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//通过这种方式相当于是直接把值打印到磁盘文件中。value其实就是每一样的的文件内容context.write(value, v);}}/*** 如果生产环境中,小文件的数量太多,那么累计起来的数量也是很庞大的,那么这时候就要设置切片的大小了。* * 即使用:CombineTextInputFormat.setMaxInputSplitSize(job, 1024*1024*150);*/public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf);job.setJarByClass(SmallFileCombiner.class);job.setMapperClass(SmallFileCombinerMapper.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(NullWritable.class);//下面的方式将小文件划分为一个切片。job.setInputFormatClass(CombineTextInputFormat.class);//如果小文件的总和为224M,将setMaxInputSplitSize中的第二个参数设置成300M的时候,在//E:\wordcount\output下只会生成一个part-m-00000这种文件//如果将setMaxInputSplitSize中的第二个参数设置成150M的时候,在//E:\wordcount\output下会生成part-m-00000 和 part-m-00001 两个文件CombineTextInputFormat.setMaxInputSplitSize(job, 1024*1024*150);CombineTextInputFormat.setInputPaths(job, new Path("e:/wordcount/input/"));FileOutputFormat.setOutputPath(job, new Path("e:/wordcount/output/"));job.setNumReduceTasks(0);job.waitForCompletion(true);}
}

准备数据:

在E:\wordcount\input目录下准备小文件(总大小为224M),如:

其中文件内容类似:

执行完成程序之后,进入E:\wordcount\output查看内容:

其中part-m-00000的内容如下:

MapReduce将小文件合并成大文件,并设置每个切片的大小的案例相关推荐

  1. Linux_Shell脚本 + 配置文件:按照不同文件类型合并文件,小文件合并成大文件

    需求概述 某项业务中,我方通过文件接口与上游系统进行数据交互,上游系统通过ftp的方式推送接口数据文件到指定目录,我方通过sqlldr的方式入库并处理接口数据. 为保证接口数据的一致性,我方每天会将前 ...

  2. 如何把两个文件合并成pdf文件?

    怎么把两个文件合并?可在同一个项目中导入两个文件,然后再将两个文件另存为一个文件.pdf编辑器合并多个pdf的方法,建议使用文档转换功能,将多个pdf文件导入后合并为一个文件.接下来,我们使用ABBY ...

  3. hive与spark合并小文件,将大文件打碎成小文件

    场景一:将小文件合并成大文件. mro_hour_test表每个分区有几千个1m未压缩小文件, 以下语句是将几千个文件在输入时(map阶段)合并成150M一个的文件,插入到mro_hour_test_ ...

  4. 怎么把多个pdf文件合并成一个?一分钟解决

    当我们有多个PDF文件时,将它们合并成一个文件可以帮助您更轻松地管理和浏览文件.不必打开多个文件,只需打开一个文件就能查看所有内容.将PDF文件合并成一个文件可以帮助您更好地组织文档,以便于共享和备份 ...

  5. TXT文本 切分 查找 替换 文件合并的大数据工具软件

    例如 切分20亿行130GB的数据只需要31分钟,查找和替换还有合并操作的耗时均不会超过31分钟 运行环境:支持所有64位的Windows操作系统,所有64位的Linux操作系统和苹果操作系统 内存要 ...

  6. 多个ai文件合并成pdf_如何将多个文档合并成PDF?

    在处理PDF文件时,我们有时候需要将多个PDF文件合并成一个,那么应该如何实现呢?今天小编在这里分享一个特别简单的方法,不用借助PDF编辑器或者转换器,用虚拟打印机就可以实现?怎么实现呢,下面请看详细 ...

  7. 如何将多个excel表格合并成一个_怎么将多个pdf文件合并成一个?

    现实生活中,不知道大家有没有遇上这样的时刻,自己不会做pdf文件,于是就去网上找了一些素材,但是网上的素材都是零零散散的,但是我们又不知道应该如何才能将她们拼凑到一起.如果你也在为这样的问题而烦恼的话 ...

  8. 怎么将几张pdf合并成一张_怎么把多个PDF文件合并成一个

    怎么把多个PDF文件合成为一个PDF文件?我相信这个问题是许多小伙伴在工作当中都会遇到的一个问题,其实想要将多个PDF文件合成为一个PDF文件还是非常简单的,只需要利用到迅捷PDF转换器,就可以轻松的 ...

  9. 怎么将几张pdf合并成一张_如何将多个pdf文件合并成一个pdf文件?

    原标题:如何将多个pdf文件合并成一个pdf文件? 我很喜欢使用PDF文件格式,为什么呢?因为PDF具有许多其他电子文档格式无法相比的优点.PDF文件格式可以将文字.字型.格式.颜色及独立于设备和分辨 ...

最新文章

  1. android 关于多任务下载问题
  2. web工程中集成cas单点登录
  3. 如何分析线程转储–线程堆栈跟踪
  4. XYZ DOWN-电子书
  5. 【回文串14】LeetCode 680. Valid Palindrome II
  6. 转 Java工程师成神之路
  7. 机械制图标准化基础知识简介
  8. CMMI基础知识扫盲 笔记
  9. 香蕉树上第四根芭蕉——c++中容器的概念说明---转载记录
  10. Element-Ui 双重el-tabs组件选中第二层时,刷新导致第一层选中样式丢失问题以及解决方法
  11. H5页面 iPhoneX适配
  12. 使用wireshark抓取聊天信息与爬虫入门
  13. 【已解决】 Unable to attach or mount volumes: unmounted volumes
  14. python中显示第三行数据_在Python中Dataframe通过print输出多行时显示省略号的实例...
  15. 解释@Transactional注解的用法
  16. Mysterious Organization
  17. 网络云存储技术Windows server 2012 (项目七 存储服务器重复数据删除的配置与管理)
  18. Python学习笔记:1.2.8 字典
  19. C++课程教学改革问卷调查报告
  20. 第二届“链坊杯”区块链数字经济商业分析大赛即将开赛

热门文章

  1. Pyhton为什么这么厉害?无意中从一道奥数题发现Python真的爽翻了
  2. Django框架深入了解_03(DRF之认证组件、权限组件、频率组件、token)
  3. Flask框架(1.flask概述,Windows配置 virtualenv虚拟环境步骤和路由以及视图函数的定义)
  4. Python学习笔记--组合数据类型
  5. OpenCASCADE绘制测试线束:布尔运算命令之构建操作结果
  6. boost::uuid模块实现不同形式随机生成器的基准的测试程序
  7. boost::random模块实现允许直观地检查分布函数的结果的测试程序
  8. boost::mpl模块实现if相关的测试程序
  9. boost::log::sources::severity_logger用法的测试程序
  10. boost::gil::detail::convolve_2d用法的测试程序