使用fileinputformat为大型文件的Map器拆分输入?

3vpjnl9f  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(323)

我正在尝试使用map reduce从ftp并行读取一个文件。我有一个代码工作,读取一个文件,并对其执行字计数。但是,当输入大小较大(具体来说超过2MB)时,它会失败。它以溢出0完成的消息停止,然后Map100%减少0%。然后服务器关闭一个连接。我不太明白。溢出0是什么意思?为什么大型输入的代码会失败?如何分割输入并将其提供给mapper?那有用吗?我可以扩展fileinputformat类来解决这个问题吗?谢谢:)

ia2d9nvy

ia2d9nvy1#

是的,您可以在 InputFormat . 除了 FileInputFormat hadoop中还有其他一些功能,比如 TextInputFormat , KeyValueInputFormat ,等等。您还可以定义如何从拆分中读取记录。为此,你需要实现你自己的 RecordReader .
http://developer.yahoo.com/hadoop/tutorial/module4.html
例如,默认值 InputFormatTextInputFormat 读取文件并使用 LineRecordReader 逐行获取记录。如果您正在从文件中读取结构化数据,则可以实现自己的 RecordReader 所以每个记录都是该文件的数据结构。
在任何情况下,从ftp读取文件的mapreduce工作都是非常奇怪的。hadoop之所以能够工作,是因为数据存储在hadoop的文件系统(hdfs)上,hdfs是一个分布式文件系统,其中每个文件都被划分成块并分布在文件系统的所有节点上。处理imho的方法应该是将该文件下载到hdfs并执行mapreduce作业。

相关问题