我在Java中编写了一个简单的代码来读取csv文件,在行中稍作修改(使用哈希),然后写入输出文件。
我想比较顺序版本(普通java)和MapReduce版本的代码。 (代码没有太大区别)。
我尝试了伪分布式hadoop(单节点)和完全分布式hadoop(3个节点)的代码,但令我惊讶的是,MapReduce版本的执行时间总是高于顺序(大约两次或三次)。
我在Hadoop方面没有太多经验,但至少分布式处理应该比串行处理花费更少的时间(因为这就是我们进行分布式处理的原因)。我甚至尝试过不同的数据集大小。
与其顺序算法相比,每个并行算法都有额外的开销 - 这个开销可以是单个机器上的线程创建和维护,但主要是它的通信开销 - 分发初始数据,IPC(进程间通信),收集部分结果和/或结合它。
算法的效率取决于各种因素 - 显然是输入大小,还有用于计算的节点数 - 请参阅isoefficiency。使用更多机器并不总是意味着更快的处理时间。通过使用等效率方程,您可以计算应该使用多少节点来解决固定问题大小以最大化效率。
您的问题没有提供详细信息,例如您使用了哪种算法以及您提供了哪些实例,但我希望对于非常大的实例,您的分布式系统应该比其顺序对应更快。