hadooop 之 FileInputFormat 类

来源:互联网 发布:安卓必备软件 知乎 编辑:程序博客网 时间:2024/06/08 05:22

1.FileInputFormat 类介绍

  • FileInputFormat 是所有使用文件作为数据源的 InputFormat 实现的基类
  • 提供两个功能:
    1.用于支出作业的输入文件的位置;
    2.输入文件生成分片的实现代码段;

类结构图:
这里写图片描述

2.通过 FileInputFormat 指定输入路径

2.1 指定路径

FileInputFormat 提供的四种静态方法:

public static void addInputPath(Job job, Path path)public static void addInputPaths(Job job, String commaSeparatedPaths)public static void setInputPaths(Job job, Path... inputPaths)public static void setInputPaths(Job job, String commaSeparatedPaths)

介绍:

  • addInputPath 添加一个路径
  • addInputPaths 添加多个路径
  • setInputPaths 一次性设定完完整的路径(覆盖性的)

2.2 指定过滤器

何为过滤器,就是排除掉特定的文件,例如指定了一个目录,此目录下有一些并不是想处理的文件,就可以使用过滤器排除掉这些不想处理的文件;

默认的过滤器排除隐藏文件(名称以“.”或者“_”开头的文件)

自定义过滤器

package mapreduce.mr.pathfilter;import org.apache.hadoop.fs.Path;import org.apache.hadoop.fs.PathFilter;public class RegexExcludePathFilter implements PathFilter{    private String regex;    public RegexExcludePathFilter(String regex){        this.regex = regex;    }    public boolean accept(Path path) {        return !path.toString().matches(regex);    }}

3.FileInputFormat 类的输入分片

分片通常与HDFS块大小一样,这在大多数应用里是合理的,不过可以通过改变Hadoop的属性来改变。

属性名 类型 默认值 描述 mapred.min.split.size int 1 一个文件分片的最小的有效字节数 mapred.max.split.size long Long.MAX_VALUE 一个文件分片中最大的有效字节数 dfs.block.size long 64MB HDFS中块的大小

两种情况的讨论:
1.设置分片最小值比HDFS块大时:此时,一个分片包含一个HDFS块以上的内容,结果会导致map任务数量不等于本地文件的文件块数;
2.设置分片最大值比HDFS快小时:此时,最大值的设置才会有效果,强制分片比快小

分片的大小由以下公式计算
max(minimumSize, min (maximumSize, blockSize) )

1 0
原创粉丝点击