使用FileInputFormat拆分大文件映射器的输入?

时间:2012-11-26 07:49:51

标签: hadoop mapreduce

我正在尝试使用map-reduce从FTP并行读取文件。我有一个代码工作,它读取文件并对其执行字数统计。但是,当输入大小很大(特定于2 MB以上)时,它会失败。 它通过Spill 0已完成消息停止,然后是Map 100%Reduce 0%。然后由服务器关闭连接。 我不太清楚。 Spill 0是什么意思?为什么大型输入的代码失败?如何拆分输入并将其提供给映射器?会有帮助吗? 我可以扩展FileInputFormat类来完成这项工作吗? 谢谢:)

1 个答案:

答案 0 :(得分:0)

是的,您可以在InputFormat上实施。除了FileInputFormat之外,Hadoop还有其他几个,例如TextInputFormatKeyValueInputFormat等。您还可以定义如何从拆分中读取记录。为此,您需要实现自己的RecordReader

http://developer.yahoo.com/hadoop/tutorial/module4.html

例如,默认InputFormatTextInputFormat,它读取文件并使用LineRecordReader逐行获取记录。如果您正在从文件中读取结构化数据,则可以实现自己的RecordReader,因此每条记录都是该文件中的数据结构。

在任何情况下,从FTP读取文件执行MapReduce作业真的很奇怪。 Hadoop的工作原理是因为数据存储在Hadoop的文件系统(HDFS)上,后者是一个分布式文件系统,每个文件被分成块并分布在文件系统的所有节点上。你应该接近IMHO的方法是将该文件下载到你的HDFS并执行你的MapReduce工作。