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