我正在处理目录中的一组文件,这是另一个任务的输出。我需要一次处理整个文件的内容(计算md5校验和并进行一些转换)。我不知道我的Map绘制者的签名应该是什么样的,如果我愿意的话
class MyMapper extends Mapper<LongWritable, Text, NullWritable, NullWritable> { ... }
然后我将在map方法中获得输入文件的全部内容。这会存储在内存中,但文件可能会很大。
有没有办法不把完整的“记录”读入内存,由hadoopMap任务处理,而是得到一个记录的“流”?
1条答案
按热度按时间monwx1rj1#
你其实不需要担心。hadoop经过优化,可以利用集群中的所有资源来完成这些任务。它的全部目的是抽象掉所有这些的低级细节,让您专注于您的用例。
我向你保证hadoop可以处理你的文件。如果它们确实很大,并且/或者您的集群的机器功能较弱或不可靠,那么作业可能需要更长的时间。但他们不会失败(没有任何其他错误)。
所以我认为你的方法很好。我唯一的建议是考虑避免使用规范的mapreduce,因为它的抽象级别不够高。请考虑级联或jcascalog。