在便携式设备上运行mapreduce

sri*_*hhs 2 android hadoop mapreduce

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

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

chu*_*ubs 6

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

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

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

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

因此,制作人的完整状态转换将是:

  1. 解析输入文件,并创建工作负载以放入队列中.
  2. 从输出队列中读取结果,直到完成所有映射过程.
  3. 按键组合结果.
  4. 使用相同的密钥将所有结果写入队列中作为一个工作单元.重复所有收到的唯一密钥.
  5. 读取在队列中返回的所有结果.

消费者状态转换将是:

  1. 从队列中读取一个工作单元.
  2. 在该工作单元上执行映射逻辑.
  3. 将结果+键写入出队列.
  4. 从队列中读取一个工作单元.
  5. 在该工作单元上执行reduce逻辑.
  6. 将结果写入出队列.

Viola map减少了android上的样式框架.