互联网

用 Hadoop 进行分布式数据处理(应用程序开发)

通过单词输入,现在您可以测试您的 mapper 脚本,如清单 7 所示。回想此脚本简单地将输入标记到键值对,此处每个值都将是 1(非惟一输入)。

清单 7. 测试 mapper 脚本

# cat input | ruby map.rb

Hadoop 1

is 1

an 1

implementation 1

of 1

the 1

map 1

reduce 1

framework 1

for 1

distributed 1

processing 1

of 1

large 1

data 1

sets. 1

#

到目前为止,一切都很顺利。现在,在原始流格式中将整个应用程序一起调出。在清单 8 中,通过 map 脚本传递您的输入、排序输出(可选步骤)、然后通过 reduce 脚本传递由此产生的中间数据。

清单 8. 使用 Linux 管道的简单 MapReduce

# cat input | ruby map.rb | sort |

ruby reduce.rb

large 1

of 2

framework 1

distributed 1

data 1

an 1

the 1

reduce 1

map 1

sets. 1

Hadoop 1

implementation 1

for 1

processing 1

is 1

#

使用 Hadoop 的 Ruby

在 shell 环境中您的 map 和 reduce 脚本按预期工作,通过 Hadoop 将它们放入测试中。我将会跳过 Hadoop 安装任务(参考本系列的 用 Hadoop 进行分布式数据处理,第 1 部分:入门 或 用 Hadoop 进行分布式数据处理,第 2 部分:进阶 以便建立 Hadoop 并使其运行)。

第一步将要在 HDFS 内为您的输入信息创建输入字典,然后提供一个将测试您脚本的简单文件。清单 9 说明了此步骤(有关这些步骤的更多信息,请参考本系列的 用 Hadoop 进行分布式数据处理,第 1 部分:入门 或 用 Hadoop 进行分布式数据处理,第 2 部分:进阶)。

清单 9. 为 MapReduce 过程创建输入数据

# hadoop fs -mkdir input

# hadoop dfs -put /usr/src/linux-source-2.6.27/Documentation/memory-barriers.txt input

# hadoop fs -ls input

Found 1 items

-rw-r--r-- 1 root supergroup 78031 2010-06-04 17:36 /user/root/input/memory-barriers.txt

#

下一步,使用 流 实用工具,通过自定义脚本来调用 Hadoop,简化输出的输入数据和位置(请参考清单 10)。在此示例中请注意 -file 选项会简单地告诉 Hadoop 来打包您的 Ruby 脚本作为部分作业提交。

清单 10. 通过 Ruby MapReduce 脚本使用 Hadoop 流

# hadoop jar /usr/lib/hadoop-0.20/

contrib/streaming/hadoop-0.20.2+228-streaming.jar

-file /home/mtj/ruby/map.rb -mapper /home/mtj/ruby/map.rb

-file /home/mtj/ruby/reduce.rb -reducer /home/mtj/ruby/reduce.rb

-input input/* -output output

packageJobJar: [/home/mtj/ruby/map.rb, /home/mtj/ruby/reduce.rb, /var/lib/hadoop-0.20/...

10/06/04 17:42:38 INFO mapred.FileInputFormat: Total input paths to process : 1

10/06/04 17:42:39 INFO streaming.StreamJob: getLocalDirs(): [/var/lib/hadoop-0.20/...

10/06/04 17:42:39 INFO streaming.StreamJob: Running job: job_201006041053_0001

10/06/04 17:42:39 INFO streaming.StreamJob: To kill this job, run:

10/06/04 17:42:39 INFO streaming.StreamJob: /usr/lib/hadoop-0.20/bin/hadoop job ...

10/06/04 17:42:39 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/...

10/06/04 17:42:40 INFO streaming.StreamJob: map 0% reduce 0%

10/06/04 17:43:17 INFO streaming.StreamJob: map 100% reduce 0%

10/06/04 17:43:26 INFO streaming.StreamJob: map 100% reduce 100%

10/06/04 17:43:29 INFO streaming.StreamJob: Job complete: job_201006041053_0001

10/06/04 17:43:29 INFO streaming.StreamJob: Output: output

#

[!--page.stats—]
希望看到您的想法,请您发表评论x