安阳专业网站建设,优秀的软文广告案例,明星静态网站,建设执业资格注册中心官方网站1 Hadoop小文件弊端 HDFS上每个文件都要在NameNode上创建对应的元数据#xff0c;这个元数据的大小约为150byte#xff0c;这样当小文件比较多的时候#xff0c;就会产生很多的元数据文件#xff0c;一方面会大量占用NameNode的内存空间#xff0c;另一方面就是元数据文件…1 Hadoop小文件弊端 HDFS上每个文件都要在NameNode上创建对应的元数据这个元数据的大小约为150byte这样当小文件比较多的时候就会产生很多的元数据文件一方面会大量占用NameNode的内存空间另一方面就是元数据文件过多使得寻址索引速度变慢。 小文件过多在进行MR计算时会生成过多切片需要启动过多的MapTask。每个MapTask处理的数据量小导致MapTask的处理时间比启动时间还小白白消耗资源。
2 Hadoop小文件解决方案
1在数据采集的时候就将小文件或小批数据合成大文件再上传HDFS数据源头
2Hadoop Archive存储方向 是一个高效的将小文件放入HDFS块中的文件存档工具能够将多个小文件打包成一个HAR文件从而达到减少NameNode的内存使用
3CombineTextInputFormat计算方向 CombineTextInputFormat用于将多个小文件在切片过程中生成一个单独的切片或者少量的切片小文件放在一起统一进行切片。
4开启uber模式实现JVM重用计算方向 当存在很多小文件的任务开启和结束关闭时间大于任务的执行时间时使用一个策略将小文件的任务开启之后运行运行完成也不结束。 默认情况下每个Task任务都需要启动一个JVM来运行如果Task任务计算的数据量很小可以让同一个Job的多个Task运行在一个JVM中不必为每个Task都开启一个JVM。 在没有开启uber模式下对/input路径上上传的小文件执行wordcount程序可用看到控制台上显示uber模式是关闭的且http://hadoop103:8088/cluster中该任务开启的容器超过1个不大于9个。 开启uber模式在mapred-site.xml中添加如下配置
!-- 开启uber模式默认关闭 --
propertynamemapreduce.job.ubertask.enable/namevaluetrue/value
/property!--uber模式中最大的mapTask数量可向下修改 --
propertynamemapreduce.job.ubertask.maxmaps/namevalue9/value
/property
!--uber模式中最大的reduce数量可向下修改 --
propertynamemapreduce.job.ubertask.maxreduces/namevalue1/value
/property
!--uber模式中最大的输入数据量默认使用dfs.blocksize 的值可向下修改 --
propertynamemapreduce.job.ubertask.maxbytes/namevalue/value
/property分发该文件再次运行wordcount程序观察到控制台显示uber模式开启且http://hadoop103:8088/cluster中该任务开启的容器只有1个。 只有一个容器的原因开启uber模式将小文件的任务开启之后运行运行完成也不结束减少开关任务的时间。