在便携式设备上运行mapreduce

时间:2010-11-21 14:34:50

标签: android hadoop mapreduce

我听说有人在google nexus上成功运行mapreduce。没有关于在an​​droid上运行完整集群mapreduce的性能的信息。

我真的很想在相对少量的数据非群集模式下在手机上运行mapreduce,完全使用hadoop真的值得吗?是否有可在任何地方使用的剥离版本?任何替代方案?

1 个答案:

答案 0 :(得分:6)

使用map reduce等过程的全部目的是将工作负载分散到多台计算机上,同时实现当前计算机无法实现的并发性。如果您没有任何计划联合多个Android设备,那么几乎不需要使用像hadoop这样的东西。

如果您可以加载设备上的所有数据(这就是您所说的可以做到的)。最接近并行运行算法的方法是使用多个线程并拆分数据集。您不必执行map reduce style编程以获得并行编程的好处,并且可能更容易将算法开发为生产者/消费者模型。但是,如果你必须拥有它,这是一种方法。

我从两个BlockingQueues(队列中和队列外)和一个从文件(即Producer)读取数据的线程开始。创建一个线程池以从队列中读取并写入输出队列。每个线程将对其中一个输入(即Consumer)进行计算,并将其结果发布到out-queue,以便Producer可以接收结果。执行一次传递队列和队列将执行map-reduce过程的一半。这通常被称为生产者/消费者。你可以用这种风格的架构做很多事情。

如果您想要执行完整的map-reduce,请重复此过程,以便您的reduce步骤并行运行。生产者将逐步收集地图中的所有结果,并将这些结果反馈到队列中。每个消费者现在都会执行reduce步骤,并将结果发布回队列,生产者将在其中进行最终排序并将结果呈现给UI。

因此,Producer的完整状态转换将是:

  1. 解析输入文件,并创建工作负载以放入队列中。
  2. 从出队列中读取结果,直到完成所有地图处理。
  3. 按键合并结果。
  4. 使用相同的密钥将所有结果写入队列中作为一个工作单元。对所有收到的唯一密钥重复此操作。
  5. 读取所有返回队列的结果。
  6. 消费者状态转换将是:

    1. 从队列中读取一个工作单元。
    2. 在该工作单元上执行地图逻辑。
    3. 将结果+密钥写入出队列。
    4. 从队列中读取一个工作单元。
    5. 在该工作单元上执行reduce逻辑。
    6. 将结果写入出队列。
    7. Viola map减少了android上的样式框架。