hadooop 之 FileInputFormat 类

hadooop 之 FileInputFormat 类1.FileInputFormat类介绍FileInputFormat是所有使用文件作为数据源的InputFormat实现的基类提供两个功能:1.用于支出作业的输入文件的位置;2.输入文件生成分片的实现代码段;类结构图:2.通过FileInputFormat指定输入路径2.1指定路径FileInputFormat提供的四种静态方法:publicstaticv

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) )

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38624.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注