我听说有人在google nexus上成功运行mapreduce。没有关于在android上运行完整集群mapreduce的性能的信息。
我真的很想在相对少量的数据非群集模式下在手机上运行mapreduce,完全使用hadoop真的值得吗?是否有可在任何地方使用的剥离版本?任何替代方案?
答案 0 :(得分:6)
使用map reduce等过程的全部目的是将工作负载分散到多台计算机上,同时实现当前计算机无法实现的并发性。如果您没有任何计划联合多个Android设备,那么几乎不需要使用像hadoop这样的东西。
如果您可以加载设备上的所有数据(这就是您所说的可以做到的)。最接近并行运行算法的方法是使用多个线程并拆分数据集。您不必执行map reduce style编程以获得并行编程的好处,并且可能更容易将算法开发为生产者/消费者模型。但是,如果你必须拥有它,这是一种方法。
我从两个BlockingQueues(队列中和队列外)和一个从文件(即Producer)读取数据的线程开始。创建一个线程池以从队列中读取并写入输出队列。每个线程将对其中一个输入(即Consumer)进行计算,并将其结果发布到out-queue,以便Producer可以接收结果。执行一次传递队列和队列将执行map-reduce过程的一半。这通常被称为生产者/消费者。你可以用这种风格的架构做很多事情。
如果您想要执行完整的map-reduce,请重复此过程,以便您的reduce步骤并行运行。生产者将逐步收集地图中的所有结果,并将这些结果反馈到队列中。每个消费者现在都会执行reduce步骤,并将结果发布回队列,生产者将在其中进行最终排序并将结果呈现给UI。
因此,Producer的完整状态转换将是:
消费者状态转换将是:
Viola map减少了android上的样式框架。