【问题标题】:Hadoop Streaming with SequenceFile (on AWS)使用 SequenceFile 进行 Hadoop 流式处理(在 AWS 上)
【发布时间】:2012-08-15 10:13:47
【问题描述】:
我有大量的 Hadoop 序列文件,我想在 AWS 上使用 Hadoop 进行处理。我现有的大部分代码都是用 Ruby 编写的,因此我想在 Amazon EMR 上使用 Hadoop Streaming 以及我的自定义 Ruby Mapper 和 Reducer 脚本。
我找不到任何关于如何将序列文件与 Hadoop 流集成以及如何将输入提供给我的 Ruby 脚本的文档。我很感激一些关于如何启动作业(直接在 EMR 上,或者只是一个普通的 Hadoop 命令行)以使用 SequenceFiles 的说明,以及一些关于如何期望将数据提供给我的脚本的信息。
--编辑:我之前错误地提到了 StreamFiles 而不是 SequenceFiles。我认为我的数据文档不正确,但很抱歉。更改后答案很简单。
【问题讨论】:
-
你试过Mandy框架吗?我已经使用它几个月了,它对我来说效果很好。
标签:
ruby
hadoop
amazon-web-services
amazon-emr
【解决方案1】:
答案是将输入格式指定为 Hadoop 的命令行参数。
-inputformat SequenceFileAsTextInputFormat
您可能希望将 SequenceFile 作为文本,但如果更合适,也可以使用 SequenceFileAsBinaryInputFormat。
【解决方案2】:
不确定这是否是您要求的,但是使用 ruby map reduce 脚本和 hadoop 命令行的命令看起来像这样:
% hadoop jar $HADOOP_INSTALL/contrib/streaming/hadoop-*-streaming.jar \
-input input/ncdc/sample.txt \
-output output \
-mapper ch02/src/main/ruby/max_temperature_map.rb \
-reducer ch02/src/main/ruby/max_temperature_reduce.rb
您可以(并且应该)将组合器用于大数据集。使用-combiner 选项添加它。组合器输出将直接馈送到您的映射器中(但不能保证这将被调用多少次,如果有的话)。否则,您的输入将被拆分(根据标准 hadoop 协议)并直接输入您的映射器。该示例来自 O'Reily 的 Hadoop:权威指南第 3 版。它有一些关于流式传输的非常好的信息,还有一个专门介绍使用 ruby 进行流式传输的部分。