我有一个超过 300000 行的文件,它是 map reduce 作业的输入,我希望该作业只处理该文件的前 1000 行。有什么好的方法可以限制发送到reducer的记录数吗?
我只需要一个简单的身份归约器来写出我的输出。目前,reducer 写出的行数与输入中的行数一样多。
首先,确保您的 mapreduce 程序设置为仅使用一个 reducer。它必须明确设置,否则 Hadoop 可能会选择其他数字,然后没有好的方法可以在 reduce 任务之间进行协调以确保它们发出的总数不超过 1000。然后,您可以简单地在 Reducer 类中维护一个实例变量,该变量计算它看到的记录数,并在 1000 之后停止发出它们。
另一种可能更简单的方法是缩短输入文件。只需删除您不需要的行。
还值得注意的是,hive 和 pig 都是可以为你做这类事情的框架。编写“原始” MapReduce 代码在实践中很少见。大多数人使用这两种中的一种。