从 图 2 中所示的简单示例看,需注意 map 和 reduce 过程这两个主要元素。虽然这里存在一个这些过程如何工作的传统视图,但是它不是 map 和 reduce 体系结构所需要的。这就是 Hadoop 的真实力量 — 其灵活性用来实现在某种程度上活动的 map 和 reduce 过程,这解决了一个特定的应用程序。虽然字数统计示例对于大量的问题是有用且适用的,但是其他的模型仍然在此总体框架内适用。所需的就是使 map 和 reduce 应用程序的开发过程对于 Hadoop 可见。
在其他的应用程序中,Hadoop 已经被用于实现包括神经网络算法的计算机学习应用程序,支持矢量计算机以及 k-means 集群(要获得更多信息,请参考 参考资料 部分)。
数据流
虽然 Hadoop 是一个基于 Java 的框架,但是其有可能在 Java 语言以外的语言中编写 msp 和 reduce 应用程序。Hadoop 内的 流 实用工具实现了一种数据流胶的类型。通过 流 实用工具,您可以定义您自己的可执行 map 和 reduce(使用每一个从标准输入 [stdin] 提取的输入和每一个通过标准输出 [stdout] 提供的输出),且 流 实用工具可适当地读取和写入数据,根据需要调用您的应用程序(请参考清单 3)。
清单 3. 使用 Hadoop 流实用工具
hadoop jar $HADOOP_HOME/hadoop-流.jar -input inputData
-output outputData
-mapper map_exec
-reducer reduce_exec
清单 3 说明如何在 Hadoop 内使用 流 实用工具,图 3 图形化地显示了如何定义流。请注意这是一个流使用的简单示例。大量的选项可用于制定如何解析数据、制定如何调用图像、为分区器和合成器指定替换图像以及调整其他配置(要获得更多信息,请参考 参考资料 部分)。
图 3. 图形流示例