我用java编写了一个简单的代码来读取csv文件,对行进行细微的更改(使用散列),然后写入输出文件。
我想比较代码的顺序版本(纯java)和mapreduce版本(代码没有太大区别)。
我尝试了伪分布式hadoop(单节点)和完全分布式hadoop(3节点)中的代码,但令我惊讶的是,mapreduce版本的执行时间总是比sequential版本的要长(大约两到三次)。
我在hadoop方面没有太多经验,但至少分布式处理应该比串行处理花费更少的时间(因为这就是为什么我们有分布式处理)。我甚至尝试了不同大小的数据集。
1条答案
按热度按时间9rbhqvlz1#
每一个并行算法都有一个额外的开销,与它的顺序对应的算法相比——这个开销可以是在一台机器上创建和维护线程,但主要是通信开销——分发初始数据、ipc(进程间通信)、收集部分结果和/或将其组合。
该算法的效率取决于各种因素——显然是输入大小,但也取决于用于计算的节点数——参见“等效率”。使用更多的机器并不总是意味着更快的处理时间。通过使用等效率方程,您可以计算一个固定的问题大小应该使用多少节点来最大化效率。
您的问题并没有提供详细的信息,比如您使用了什么算法以及您提供了什么示例,但是我希望对于非常大的示例,您的分布式系统应该比其顺序对应的系统更快。