hadooop 之 FileInputFormat 类

本文介绍了Hadoop中FileInputFormat的基本概念及其核心功能:指定输入路径和输入分片的实现方式。阐述了如何通过静态方法指定单个或多个输入路径,并介绍了默认及自定义路径过滤器的应用场景。此外,还详细解释了输入分片的工作原理,包括其与HDFS块大小的关系及分片大小的计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.sizeint1一个文件分片的最小的有效字节数
mapred.max.split.sizelongLong.MAX_VALUE一个文件分片中最大的有效字节数
dfs.block.sizelong64MBHDFS中块的大小

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值