将用户指定的每个数字翻倍

  • 本文关键字:数字 用户 hadoop mapreduce
  • 更新时间 :
  • 英文 :


我是hadoop的新手,我正在通过使用几个例子来学习。我目前正试图传递一个随机整数的文件。对于每一个数字,我希望它是用户在运行时指定的数字的双基数。

3536 5806 2545 249 485 5467 1162 8941 962 6457665 6754 889 5159 3161 5401 704 4897 135 9078111 1059 4971 5195 3031 630 6265 827 5882 93589212 9540 676 3191 4995 8401 9857 4884 8002 3701931 875 6427 6945 5483 545 4322 5120 1694 25409039 5524 872 840 8730 4756 2855 718 6612 4125

以上是文件示例。

例如当用户在运行时指定

 jar ~/dissertation/workspace/TestHadoop/src/DoubleNum.jar DoubleNum Integer Output 3

的输出,假设第一行将是3536 * 8 5806* 8 2545* 8 249* 8 485* 8 5467* 8 1162* 8 8941* 8 962* 8 6457* 8

因为每次迭代的次数都是2倍,所以3次迭代的次数是2^3。我如何使用mapreduce实现这一点?

要将一个作业链接到下一个作业,请查看:在Hadoop中链接多个MapReduce作业

同时,这可能是学习序列文件的好时机,因为它们提供了一种将数据从一个map/reduce作业传递到另一个map/reduce作业的有效方法。

对于您的特定问题,这里不需要约简器,所以通过将约简器的数量设置为零来实现映射。将输出发送到reducer只会产生额外的网络开销。(但是,要注意随着时间的推移创建的文件数量,最终NameNode将不喜欢它。每个映射器将创建一个文件)

我明白你想用这个例子来说明更复杂的事情…但是在这种情况下,您可以使用一种常见的优化技术:如果您发现自己想要将一个仅映射任务链接到另一个map/reduce作业,您可以将两个映射器压缩在一起。例如,不是乘以2,然后再乘以2,为什么不在同一个映射器中乘以2,再乘以2,再乘以2 ?基本上,如果所有操作都独立于一个数字或一行,则可以在同一映射器中应用每个记录的迭代。这将大大减少开销。

相关内容

  • 没有找到相关文章

最新更新