InputFormat,它描述了一个MapReduce Job的输入,通过InputFormat,Hadoop可以:
l检查MapReduce输入数据的正确性;
l将输入数据切分为逻辑块InputSplit,这些块会分配给Mapper;
l提供一个RecordReader实现,Mapper用该实现从InputSplit中读取输入的<K,V>对。
在org.apache.hadoop.mapreduce.lib.input中,Hadoop为所有基于文件的InputFormat提供了一个虚基类FileInputFormat。下面几个参数可以用于配置FileInputFormat:
lmapred.input.pathFilter.class:输入文件过滤器,通过过滤器的文件才会加入InputFormat;
lmapred.min.split.size:最小的划分大小;
lmapred.max.split.size:最大的划分大小;
lmapred.input.dir:输入路径,用逗号做分割。
类中比较重要的方法有:
protectedList<FileStatus> listStatus(Configuration job)
递归获取输入数据目录中的所有文件(包括文件信息),输入的job是系统运行的配置Configuration,包含了上面我们提到的参数。
publicList<InputSplit> getSplits(JobContext context)
将输入划分为InputSplit,包含两个循环,第一个循环处理所有的文件,对于每一个文件,根据输入的划分最大/最小值,循环得到文件上的划分。注意,划分不会跨越文件。
FileInputFormat没有实现InputFormat的createRecordReader方法。
FileInputFormat有两个子类,SequenceFileInputFormat是Hadoop定义的一种二进制形式存放的键/值文件(参考http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/io/SequenceFile.html),它有自己定义的文件布局。由于它有特殊的扩展名,所以SequenceFileInputFormat重载了listStatus,同时,它实现了createRecordReader,返回一个SequenceFileRecordReader对象。TextInputFormat处理的是文本文件,createRecordReader返回的是LineRecordReader的实例。这两个类都没有重载FileInputFormat的getSplits方法,那么,在他们对于的RecordReader中,必须考虑FileInputFormat对输入的划分方式。
FileInputFormat的getSplits,返回的是FileSplit。这是一个很简单的类,包含的属性(文件名,起始偏移量,划分的长度和可能的目标机器)已经足以说明这个类的功能。
RecordReader用于在划分中读取<Key,Value>对。RecordReader有五个虚方法,分别是:
linitialize:初始化,输入参数包括该Reader工作的数据划分InputSplit和Job的上下文context;
lnextKey:得到输入的下一个Key,如果数据划分已经没有新的记录,返回空;
lnextValue:得到Key对应的Value,必须在调用nextKey后调用;
lgetProgress:得到现在的进度;
lclose,来自java.io的Closeable接口,用于清理RecordReader。
我们以LineRecordReader为例,来分析RecordReader的构成。前面我们已经分析过FileInputFormat对文件的划分了,划分完的Split包括了文件名,起始偏移量,划分的长度。由于文件是文本文件,LineRecordReader的初始化方法initialize会创建一个基于行的读取对象LineReader(定义在org.apache.hadoop.util中,我们就不分析啦),然后跳过输入的最开始的部分(只在Split的起始偏移量不为0的情况下进行,这时最开始的部分可能是上一个Split的最后一行的一部分)。nextKey的处理很简单,它使用当前的偏移量作为Key,nextValue当然就是偏移量开始的那一行了(如果行很长,可能出现截断)。进度getProgress和close都很简单。
分享到:
相关推荐
通过对Hadoop源码的深入研究,开发者可以更好地理解和定制Hadoop以适应特定的业务需求,提高数据处理效率。同时,源码分析也有助于培养解决问题的能力,为解决Hadoop在实际应用中遇到的问题提供思路。 总的来说,...
- 需要在Hadoop-1.2.1源码包中的`src/examples/org/apache/hadoop/examples/WordCount.java`进行必要的修改。 - 编译Java文件,这一步可能会比较耗时。 2. **替换编译后的类文件**: - 将编译好的`WordCount*....
- 使用Cygwin提交任务到Hadoop集群:`hadoop jar yourjob.jar YourMainClass input output`。 8. **cygwin安装后文件备份**: - 定期备份Cygwin的安装目录和用户配置文件,以防意外丢失。这些文件通常位于 `C:\...
你需要从Hadoop源码编译得到或者从网络上找到对应的版本,并将其放在`%HADOOP_HOME%\bin`目录下。 5. **安全认证**:如果Hadoop集群启用了Kerberos安全模式,那么在Windows上运行MapReduce作业还需要配置Kerberos...
### Hadoop与HBase集群及单机安装配置详解 #### 一、背景介绍 随着大数据技术的发展,Hadoop和HBase成为了处理大规模数据集的重要工具。Hadoop是一种能够存储和处理大量数据的分布式计算框架,而HBase则是在Hadoop...
本篇文档深入浅出地介绍了Hadoop集群的WordCount运行详解,从MapReduce理论到WordCount程序的运行,再到源码分析,内容丰富且详细,对于想要入门和深入了解Hadoop分布式计算和MapReduce模型的读者来说,是一份宝贵的...
2. **下载Hadoop源码**:从Apache官方网站获取Hadoop 2.7.5的源代码: ```bash wget https://downloads.apache.org/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz ``` 3. **解压Hadoop源代码**: ```bash ...
要将其与Hadoop和Hbase集成,首先需要从GitHub获取最新版本的Nutch-2.x源码,并根据项目文档编译Nutch。 在`conf/nutch-site.xml`中,配置Nutch的基本参数,如抓取间隔、抓取策略等。还需在`conf/hadoop-site.xml`...
首先,我们需要下载Hadoop 3.0.0的源码软件包,解压到一个合适的目录。确保你的系统满足Hadoop的硬件和软件需求,例如Java环境(JDK 8或更高版本)已经安装并配置好环境变量。 1. **配置Hadoop**: - 打开`hadoop/...
在这个命令中,`$HADOOP_INSTALL` 指向 Hadoop 安装目录,`input/ncdc/sample.txt` 是输入文件,`output` 是输出目录,`max_temperature_map.rb` 和 `max_temperature_reduce.rb` 分别是 Map 和 Reduce 的脚本。...
然后,下载Hadoop的源码或二进制包。通常,我们会从Apache官方网站获取最新稳定版。解压后,将Hadoop配置文件夹`etc/hadoop`软连接到`/etc`目录,便于管理。例如:`sudo ln -s /path/to/hadoop/etc/hadoop /etc/...
大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...
《Hadoop权威指南2》是Hadoop领域的一本经典著作,深入浅出地讲解了Hadoop的核心概念、架构以及实际应用。源码是书中理论知识的实践...总之,《Hadoop权威指南2》的源码是学习和研究Hadoop的宝贵资源,值得深入研究。
- 使用MapReduce执行WordCount,运行`hadoop jar hadoop-examples-<version>.jar wordcount <input> <output>`命令,其中`<input>`是输入文件的HDFS路径,`<output>`是输出结果的路径。 在运行过程中,会显示出...
$ /usr/local/hadoop/bin/hadoop fs -put ./input input ``` 现在,我们可以尝试运行WordCount程序: ```bash $ /usr/local/hadoop/bin/hadoop jar WordCount.jar org/apache/hadoop/examples/WordCount input ...
3. **创建提交脚本**:创建一个提交脚本(通常为bash脚本),用于指定Map和Reduce任务的输入、输出路径,以及调用Hadoop Streaming命令。命令格式如下: ``` hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/...
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.x.x.jar wordcount /input /output ``` 9. **使用Hadoop工具**: Hadoop提供了很多命令行工具,如fsck用于检查HDFS健康状况,distcp用于数据...
Hadoop_Genomic_Analysis 这是一个 Hadoop 版本的 HiC 数据基因组分析工具,目的是将 HiC 内部相互作用映射到基因,然后获得基因-基因相互作用网络并进行进一步研究。 请参阅 Spark 版本以获取更多详细信息。 如何...
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class IntMinMax { public static class IntMapper extends Mapper, ...
Javaweb课程作业基于Hadoop的中文词频统计工具源码+使用说明.zip 一、Linux下配置hadoop集群(伪分布式或完全分布式) 1、https://blog.csdn.net/z1148059382/article/details/89459182 2、Windows下管理HDFS的神器...