我正在尝试使用map reduce从ftp并行读取一个文件。我有一个代码工作,读取一个文件,并对其执行字计数。但是,当输入大小较大(具体来说超过2MB)时,它会失败。它以溢出0完成的消息停止,然后Map100%减少0%。然后服务器关闭一个连接。我不太明白。溢出0是什么意思?为什么大型输入的代码会失败?如何分割输入并将其提供给mapper?那有用吗?我可以扩展fileinputformat类来解决这个问题吗?谢谢:)
ia2d9nvy1#
是的,您可以在 InputFormat . 除了 FileInputFormat hadoop中还有其他一些功能,比如 TextInputFormat , KeyValueInputFormat ,等等。您还可以定义如何从拆分中读取记录。为此,你需要实现你自己的 RecordReader .http://developer.yahoo.com/hadoop/tutorial/module4.html例如,默认值 InputFormat 是 TextInputFormat 读取文件并使用 LineRecordReader 逐行获取记录。如果您正在从文件中读取结构化数据,则可以实现自己的 RecordReader 所以每个记录都是该文件的数据结构。在任何情况下,从ftp读取文件的mapreduce工作都是非常奇怪的。hadoop之所以能够工作,是因为数据存储在hadoop的文件系统(hdfs)上,hdfs是一个分布式文件系统,其中每个文件都被划分成块并分布在文件系统的所有节点上。处理imho的方法应该是将该文件下载到hdfs并执行mapreduce作业。
InputFormat
FileInputFormat
TextInputFormat
KeyValueInputFormat
RecordReader
LineRecordReader
1条答案
按热度按时间ia2d9nvy1#
是的,您可以在
InputFormat
. 除了FileInputFormat
hadoop中还有其他一些功能,比如TextInputFormat
,KeyValueInputFormat
,等等。您还可以定义如何从拆分中读取记录。为此,你需要实现你自己的RecordReader
.http://developer.yahoo.com/hadoop/tutorial/module4.html
例如,默认值
InputFormat
是TextInputFormat
读取文件并使用LineRecordReader
逐行获取记录。如果您正在从文件中读取结构化数据,则可以实现自己的RecordReader
所以每个记录都是该文件的数据结构。在任何情况下,从ftp读取文件的mapreduce工作都是非常奇怪的。hadoop之所以能够工作,是因为数据存储在hadoop的文件系统(hdfs)上,hdfs是一个分布式文件系统,其中每个文件都被划分成块并分布在文件系统的所有节点上。处理imho的方法应该是将该文件下载到hdfs并执行mapreduce作业。