hadoop spark合并小文件
一.输入文件类型设置为 CombineTextInputFormat
hadoop
job.setInputFormatClass(CombineTextInputFormat.class)
spark
val data = sc.newAPIHadoopFile(args(1),
classOf[CombineTextInputFormat],
classOf[LongWritable],
classOf[Text], hadoopConf)
.map { //TODO }
(hadoop2.7及其以上版本有这个类,虽然2.6也可能用这个类,但不兼容,会出一些bug导致任务失败;或者直接就报错找不到类)
二.再配置以下参数:
(如果设置了CombineTextInputFormat而不配置分片大小的参数,所有输入会合并为一个文件,也就是说,不管你数据多大,只有一个Map,血泪的教训啊!)
1.运行时加参数
-D mapreduce.input.fileinputformat.split.minsize=134217728
-D mapreduce.input.fileinputformat.split.maxsize=512000000
-D mapred.linerecordreader.maxlength=32768
例如: hadoop jar xx.jar -D mapreduce.input.fileinputformat.split.minsize=134217728 -D mapreduce.input.fileinputformat.split.maxsize=512000000 <input> <output>
运行时添加参数这种方法需要在Diver 的main方法第一行添加如下代码(很重要):
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
不然直接拿会把运行参数-D当成 args[0],用GenericOptionsParser解析后otherArgs[0]参数是才是<input>;
不习惯运行时添加参数可以直接在Diver类中写死,代码中的设置会覆盖运行时添加的参数。
2.代码中设置参数
var hadoopConf = new Configuration()
hadoopConf.set("mapreduce.input.fileinputformat.split.maxsize", "512000000")
hadoopConf.set("mapreduce.input.fileinputformat.split.minsize", "268435456")
hadoopConf.set("mapreduce.input.fileinputformat.split.minsize.per.node", "134217728") //下面这两参数可以不设置,详情看文章末尾
hadoopConf.set("mapreduce.input.fileinputformat.split.minsize.per.rack", "268435456")
maxsize和minsize是设置分片上下限的。
(这里还个参数,一般用不上 -D mapred.linerecordreader.maxlength=32768)设置每行最大长度。
MapReduce中获取job实例的时候把hadoopConf传入
Job job = Job.getInstance(hadoopConf,"MyJob");
Spark
//还是上面的spark示例代码 创建RDD的时候传入
val data = sc.newAPIHadoopFile(args(1),
classOf[CombineTextInputFormat],
classOf[LongWritable],
classOf[Text], hadoopConf)
.map { //TODO }
完毕,打包运行代码吧!
other:
hadoopconf 的其他两个参数可以不设置,了解一下
- 如果指定了mapreduce.input.fileinputformat.split.maxsize,那么在同一个节点上的Blocks合并,一个超过maxsize就生成新分片。
- mapreduce.input.fileinputformat.split.minsize.per.node,那么会把1.中处理剩余的Block,进行合并,如果超过minsize,那么全部作为一个分片。否则这些Block与同一机架 Rack上的块进行合并。
- 每个节点上如上同样的方式处理,然后针对整个Rack的所有Block,按照1.方式处理。剩余部分,如果指定了mapreduce.input.fileinputformat.split.minsize.per.rack,并且超过minsize.per.rack,则全部作为一个分片,否则这些Block保留,等待与所有机架上的剩余Block进行汇总处理。
每个机架上都按照1,2,3方式处理,汇总所有处理剩下的部分,再按照1的逻辑处理。再剩余的,作为一个分片。
hadoop spark合并小文件的更多相关文章
- Hadoop HDFS编程 API入门系列之合并小文件到HDFS(三)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs7; import java.io.IOException;import ja ...
- 关于hadoop处理大量小文件情况的解决方法
小文件是指那些size比HDFS的block size(默认64m)小的多的文件.任何一个文件,目录和bolck,在HDFS中都会被表示为一个object存储在namenode的内存中,每一个obje ...
- HDFS 07 - HDFS 性能调优之 合并小文件
目录 1 - 为什么要合并小文件 2 - 合并本地的小文件,上传到 HDFS 3 - 合并 HDFS 的小文件,下载到本地 4 - 通过 Java API 实现文件合并和上传 版权声明 1 - 为什么 ...
- [转载]mapreduce合并小文件成sequencefile
mapreduce合并小文件成sequencefile http://blog.csdn.net/xiao_jun_0820/article/details/42747537
- Hive 利用 on tez 引擎 合并小文件
Hive 利用 on tez 引擎 合并小文件 标签(空格分隔): Hive \[f(N) + \sum_{i=2}^N f(N-i+1)*X_i\] SET hive.exec.dynamic.pa ...
- hadoop 使用map合并小文件到SequenceFile
上一例是直接用SequenceFile的createWriter来实现,本例采用mapreduce的方式. 1.把小文件整体读入需要自定义InputFormat格式,自定义InputFormat格式需 ...
- Hadoop合并小文件的几种方法
1.Hadoop HAR 将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-Reduce进行操作,打包后的文件由索引和存储两大部分组成: 缺点: 一旦创建就不能修改,也不支 ...
- Spark SQL 小文件问题处理
在生产中,无论是通过SQL语句或者Scala/Java等代码的方式使用Spark SQL处理数据,在Spark SQL写数据时,往往会遇到生成的小文件过多的问题,而管理这些大量的小文件,是一件非常头疼 ...
- Hadoop处理大量小文件的问题和解决方法
小文件指的是那些size比HDFS的block size(默认64M)小的多的文件.如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用hadoop了).而HDFS ...
随机推荐
- Java基础知识点总结(一)
1.源文件声明规则2.JAVA基本类型void3.数据类型默认值4.自动类型转换5.Java变量类型6.Java局部变量7.访问控制修饰符8.父类与子类的访问控制9.instanceof运算符 1.源 ...
- C库函数strstr分析
C标准库<string.h> 函数声明: char* strstr(char* const _String, char const* const _SubString) 返回值: SubS ...
- 如何选择CPU
一.品牌: 选择哪家公司的处理器,AMD公司和inter公司的处理器相比较,AMD在三维制作.游戏应用.和视频处理方面突出,inter的处理器在商业应用.多媒体应用.平面设计方面有优势,性能方面,同档 ...
- 一起来学习.net core程序使用中介者模式:MediatR插件
中介者模式是一种常见的设计模式,旨再降低程序的耦合性,因为传统的三层模式层层之间需要显示的调用,必须上层依赖下层,耦合性很高,为了解耦,将所有的指令单独放在一个位置处理,其他位置均通过这个位置来间接的 ...
- 重磅开源 KSQL:用于 Apache Kafka 的流数据 SQL 引擎 2017.8.29
Kafka 的作者 Neha Narkhede 在 Confluent 上发表了一篇博文,介绍了Kafka 新引入的KSQL 引擎——一个基于流的SQL.推出KSQL 是为了降低流式处理的门槛,为处理 ...
- vmare-Tools重启后也不生效的问题
这也是一个关于 Tools的问题,如题,既不能互相拷贝文件,也不能调节分辨率,好像是因为 Tools 的版本问题 需要进行的操作: 1:sudo apt-get install open-vm-too ...
- 2019 美柚java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美柚等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美柚,入职一年时间了,也成为了面试官,之 ...
- python基础09--闭包,装饰器
1.1 闭包 1.函数作为第一类对象,支持赋值给变量,作为参数传递给其它函数,作为其它函数的返回值,支持函数的嵌套,实现了__call__方法的类实例对象也可以当做函数被调用 2.s= func - ...
- [Flutter] 实现Flutter App内更新
app内实现根据安卓和IOS平台进行更新 时间匆忙,相关操作以及信息都写在代码注释里面了,闲时在补充和完善. 功能在android项目中测试可用,ios上还未进行测试,如果ios有问题或者没问题的话都 ...
- HTML5实现无刷新修改URL
前言 今天在做一个vue的搜索功能,需要从搜索结果页面跳转到细节页面,然后点击返回还能返回到刚刚的结果页面,如果只用window.history.go(-1)当然会重新刷新搜索页面,当然是不行的. 我 ...