温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java的Hadoop CombineTextInputFormat小文件切片怎么理解

发布时间:2021-12-09 14:23:41 来源:亿速云 阅读:153 作者:iii 栏目:大数据

本篇内容介绍了“Java的Hadoop CombineTextInputFormat小文件切片怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

框架默认的TextInputFormat切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个MapTask,这样如果有大量小文件,就会产生大量的MapTask,比如有一个2m的文件,但是默认分片还是128m,处理效率极其低下。

1、应用场景:

CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理,就不至于每个小文件规划大的切片了。

2、虚拟存储切片最大值设置

CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);// 4m

注意:虚拟存储切片最大值设置最好根据实际的小文件大小情况来设置具体的值。

3、切片机制

生成切片过程包括:虚拟存储过程和切片过程二部分。

Java的Hadoop CombineTextInputFormat小文件切片怎么理解

虚拟存储过程:

获取输入目录下所有文件大小,依次和代码中设置的setMaxInputSplitSize值做比较,如果不大于设置的最大值,逻辑上划分一个切片。如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块切片;当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)。

例如setMaxInputSplitSize值为5M,输入文件大小为10.02M,则先逻辑上分成一个5M。剩余的大小为5.02M,如果按照5M逻辑划分,就会出现0.02M的小的虚拟存储文件,所以将剩余的5.02M文件切分成(2.51M和2.51M)两个文件。

切片过程:

(a)  判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个切片。

(b)  如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片。

(c)  测试举例:有4个小文件大小分别为1.7M、5.1M、3.4M以及6.8M这四个小文件,则虚拟存储之后形成6个文件块,大小分别为:

1.7M,(2.55M、2.55M),3.4M  以及(3.4M、3.4M)

(d)  最终会形成3个切片,大小分别为:(1.7+2.55)M,(2.55+3.4)M,(3.4+3.4)M

CombineTextInputFormat案例实操

1.需求

将输入的大量小文件合并成一个切片统一处理。

(1)输入数据

准备4个小文件

(2)期望

期望一个切片处理4个文件

2.实现过程

(1)不做任何处理,运行WordCount案例程序,观察切片个数为4。

(2)在WordcountDriver中增加如下代码,运行程序并观察运行的切片个数为3。

(a)驱动类中添加代码如下:

// 如果不设置InputFormat,它默认用的是TextInputFormat.classjob.setInputFormatClass(CombineTextInputFormat.class);//虚拟存储切片最大值设置4mCombineTextInputFormat.setMaxInputSplitSize(job, 4194304);

(b)运行结果为3个切片。

(3)在WordcountDriver中增加如下代码,运行程序并观察运行的切片个数为1。

(a)驱动中添加代码如下:

// 如果不设置InputFormat,它默认用的是TextInputFormat.classjob.setInputFormatClass(CombineTextInputFormat.class);
//虚拟存储切片最大值设置20mCombineTextInputFormat.setMaxInputSplitSize(job, 20971520);

(b)运行结果为1个切片。

“Java的Hadoop CombineTextInputFormat小文件切片怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI