android - 在可移植设备上运行 MapReduce

标签 android hadoop mapreduce

我听说有人在 Google Nexus 上成功运行了 MapReduce。没有更多关于在 Android 上运行完整集群 MapReduce 的性能的信息。

我真的很想在手机上以相对少量数据的非集群模式运行mapreduce,完全使用hadoop真的值得吗?哪里有精简版的吗?还有其他选择吗?

最佳答案

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

如果您可以加载设备上的所有数据(这就是您所说的可以做到的)。与并行运行算法最接近的方法是使用多个线程并拆分数据集。您不必进行映射缩减式编程即可获得并行编程的优势,并且将算法开发为生产者/消费者模型可能会更容易。但是,如果你只是想拥有它,这里是一种方法。

我将从两个 BlockingQueues(队列内和队列外)和一个用于从文件(即生产者)读取数据的线程开始。创建一个线程池以从入队列中读取并写入出队列。每个线程将对输入之一(即消费者)进行计算,并将其结果发布到出队列,以便生产者可以接收结果。对入队列和出队列进行一次遍历将完成映射缩减过程的一半。这通常称为生产者/消费者。您可以使用这种风格的架构做很多事情。

如果您想要执行完整的映射缩减,请重复该过程,以便您的缩减步骤并行运行。生产者将按键从 map 中收集所有结果,并将这些结果反馈到队列中。现在,每个消费者将执行归约步骤,并将其结果发布回输出队列,生产者将在其中进行最终排序并将结果呈现给 UI。

因此,生产者的完整状态转换将是:

  1. 解析输入文件,并创建要放入队列中的工作负载。
  2. 从出队列中读取结果,直到所有映射进程完成。
  3. 按键合并结果。
  4. 将具有相同键的所有结果作为一个工作单元写入队列中。对收到的所有唯一 key 重复此操作。
  5. 读取输出队列中返回的所有结果。

消费者状态转换将是:

  1. 从队列中读取一个工作单元。
  2. 对该工作单元执行 map 逻辑。
  3. 将结果 + key 写入出队列。
  4. 从队列中读取一个工作单元。
  5. 对该工作单元执行归约逻辑。
  6. 将结果写入出队列。

Android 上的 Viola map 缩减样式框架。

关于android - 在可移植设备上运行 MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238377/

相关文章:

java - 如何在我的 Libgdx 游戏中制作全局高分表?

java - 来自 Java 代码的工作流程暂停

hadoop - 使用 “Add File”部分时,Hortonworks Hue Oozie流作业失败(shell脚本)

hadoop - 根据相同键的值编写列表 MapReduce Hadoop

Android - 新 BottomNavigationBar 中的 PageView - 防止重新加载 fragment

android - RadioButtons 下方的文本

java - 将变量从 ViewPager 传递到 Clicklistener

hadoop - 使用 Yum 安装 Cloudera CDH4 失败

hadoop - MapReduce 或 Spark 用于 Hadoop 上的批处理?

hadoop - 日志没有出现在控制台中 :( [Hadoop Question]