5

我正在尝试使用 Amazon 的 Elastic Map Reduce 来处理 Google ngrams 数据集。在http://aws.amazon.com/datasets/8172056142375670有一个公共数据集,我想使用 Hadoop 流。

对于输入文件,它说“我们将数据集存储在 Amazon S3 中的单个对象中。该文件是具有块级 LZO 压缩的序列文件格式。序列文件键是存储为 LongWritable 的数据集的行号,并且value 是存储为 TextWritable 的原始数据。”

为了使用 Hadoop Streaming 处理这些输入文件,我需要做什么?

我尝试在我的论点中添加一个额外的“-inputformat SequenceFileAsTextInputFormat”,但这似乎不起作用——我的工作由于某些未指明的原因而不断失败。我还缺少其他论点吗?

我尝试使用一个非常简单的身份作为我的映射器和减速器

#!/usr/bin/env ruby

STDIN.each do |line|
  puts line
end

但这不起作用。

4

4 回答 4

6

lzo 被打包为弹性 mapreduce 的一部分,因此无需安装任何东西。

我刚试过这个,它的工作原理......

hadoop jar ~hadoop/contrib/streaming/hadoop-streaming.jar \
  -D mapred.reduce.tasks=0 \
  -输入 s3n://datasets.elasticmapreduce/ngrams/books/20090715/eng-all/1gram/ \
  -inputformat SequenceFileAsTextInputFormat \
  -输出测试输出\
  -mapper org.apache.hadoop.mapred.lib.IdentityMapper
于 2011-06-15T21:35:09.230 回答
3

由于许可问题,Lzo 压缩已从 Hadoop 0.20.x 开始删除。如果要处理 lzo 压缩的序列文件,则必须在 hadoop 集群中安装和配置 lzo 本机库。

Kevin 的Hadoop-lzo项目是我所知道的当前可行的解决方案。我试过了。有用。

在操作系统上安装(如果尚未安装)lzo-devel 软件包。这些包在操作系统级别启用 lzo 压缩,没有这些包,hadoop lzo 压缩将无法工作。

按照 hadoop-lzo 自述文件中指定的说明进行编译。构建后,您将获得 hadoop-lzo-lib jar 和 hadoop lzo 本机库。确保从配置集群的机器(或相同架构的机器)编译它。

还需要 Hadoop 标准本机库,这些库默认情况下已在 Linux 发行版中提供。如果您使用的是 solaris,您还需要从源代码构建 hadoop 以获得标准的 hadoop 本机库。

完成所有更改后重新启动集群。

于 2011-02-24T03:46:11.987 回答
1

你可能想看看这个https://github.com/kevinweil/hadoop-lzo

于 2011-02-21T20:47:11.387 回答
0

我使用 lzo 得到了奇怪的结果,我的问题通过其他一些编解码器得到了解决

-D mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec

然后事情就正常了。您不需要(也许也不应该)更改-inputformat.

Version: 0.20.2-cdh3u4, 214dd731e3bdb687cb55988d3f47dd9e248c5690
于 2012-12-04T09:31:22.180 回答