4

我有大量的 Hadoop 序列文件,我想在 AWS 上使用 Hadoop 进行处理。我现有的大部分代码都是用 Ruby 编写的,因此我想在 Amazon EMR 上使用 Hadoop Streaming 以及我的自定义 Ruby Mapper 和 Reducer 脚本。

我找不到任何关于如何将序列文件与 Hadoop 流集成以及如何将输入提供给我的 Ruby 脚本的文档。我很感激一些关于如何启动作业(直接在 EMR 上,或者只是一个普通的 Hadoop 命令行)以使用 SequenceFiles 的说明,以及一些关于如何期望将数据提供给我的脚本的信息。

--编辑:我之前错误地提到了 StreamFiles 而不是 SequenceFiles。我认为我的数据文档不正确,但很抱歉。答案很容易改变。

4

2 回答 2

1

对此的答案是将输入格式指定为 Hadoop 的命令行参数。

-inputformat SequenceFileAsTextInputFormat

您可能希望将 SequenceFile 作为文本,但SequenceFileAsBinaryInputFormat如果那更合适,也有可能。

于 2013-01-10T07:50:19.077 回答
0

不确定这是否是您所要求的,但使用 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​​ 进行流式传输的部分。

于 2012-10-24T19:27:13.290 回答