用 Hadoop 进行分布式数据处理,第 3 部分: 应用程序开发
2010-08-11 00:00:00 来源:WEB开发网清单 3. 使用 Hadoop 流实用工具
hadoop jar $HADOOP_HOME/hadoop-流.jar \
-input inputData
-output outputData
-mapper map_exec
-reducer reduce_exec
清单 3 说明如何在 Hadoop 内使用 流 实用工具,图 3 图形化地显示了如何定义流。请注意这是一个流使用的简单示例。大量的选项可用于制定如何解析数据、制定如何调用图像、为分区器和合成器指定替换图像以及调整其他配置。
图 3. 图形流示例
Ruby 示例
通过已经获得的在 流 实用工具基本理解上的经验,您已经准备编写一个简单的 Ruby map 和 reduce 应用程序并查看如何在 Hadoop 框架中使用过程。虽然此处的示例伴随着规范的 MapReduce 应用程序,但是稍后您将看到其他的应用程序(取决于您将如何用 map 和 reduce 格式实现它们)。
首选是 mapper。此脚本从 stdin 提取文本输入,首先标记它,然后将一系列键值对发送到 stdout。像大多数面向对象的脚本语言一样,这个任务几乎太简单了。如清单 4 中所示的 mapper 脚本(通过一些注释和空白区域可给与其大一点的大小)。此程序使用一个迭代器来从 stdin 中读取一行,同时另一个迭代器将该行分割成单个的标记。使用为 1 的相关值(通过选项卡分隔)将每一个标记(单词)发送到 stdout。
清单 4. Ruby map 脚本(map.rb)
#!/usr/bin/env ruby
# Our input comes from STDIN
STDIN.each_line do |line|
# Iterate over the line, splitting the words from the line and emitting
# as the word with a count of 1.
line.split.each do |word|
puts "#{word}\t1"
end
end
更多精彩
赞助商链接