通过流式处理来处理数据 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过流式处理来处理数据

Hadoop Streaming 是 Hadoop 附带的一种实用工具,可让您以非 Java 语言开发 MapReduce 可执行文件。流式处理是以 JAR 文件的形式实现的,这样您就可以像运行标准 JAR 文件一样,从 Amazon EMR API 或命令行运行它。

此部分介绍如何结合使用 Streaming 与 Amazon EMR。

注意

Apache Hadoop Streaming 是一种独立工具。因此,这里并不介绍其所有函数和参数。有关 Hadoop Streaming 的更多信息,请转到 http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html

使用 Hadoop Streaming 实用工具

此部分介绍如何使用 Hadoop 的 Streaming 实用工具。

1

以您所选择的编程语言编写映射器和 Reducer 可执行文件。

按照 Hadoop 的文档中的指示编写流式处理可执行文件。该等程序应从标准输入读取其输入内容,并通过标准输出来输出数据。默认情况下,输入/输出的每一行都代表一条记录,并且每一行中的第一个制表符都用作密钥与值之间的分隔符。

2

在本地测试您的可执行文件,并将它们上载到 Amazon S3。

3

使用 Amazon EMR 命令行界面或 Amazon EMR 控制台可运行您的应用程序。

每个映射器脚本都会以单独进程的形式在集群中启动。每个 Reducer 可执行文件都会通过任务流程将映射器可执行文件的输出转到数据输出中。

大多数 Streaming 应用程序都需要 inputoutputmapperreducer 参数。下表描述了上述参数和其它可选参数。

参数 描述 必填
-input

输入数据在 Amazon S3 上的位置。

类型:字符串

默认值:无

约束:URI。如果没有指定协议,那么它就可以使用集群的默认文件系统。

-output

Amazon S3 上的位置,该位置为 Amazon EMR 上载已处理数据的地方。

类型:字符串

默认值:无

约束:URI

默认值:如果没有指定位置,那么 input 会将数据上载至 Amazon EMR 指定的位置。

-mapper

映射器可执行文件的名称。

类型:字符串

默认值:无

-reducer

Reducer 可执行文件的名称。

类型:字符串

默认值:无

-cacheFile

一个 Amazon S3 位置,其中包含一些文件可供 Hadoop 复制到本地工作目录(主要目的是提高性能)。

类型:字符串

默认值:无

约束:[URI]#[要在工作目录中创建的符号链接名称]

-cacheArchive

提取到工作目录的 JAR 文件。

类型:字符串

默认值:无

约束:[URI]#[要在工作目录中创建的符号链接目录名称]

-combiner

合并结果

类型:字符串

默认值:无

约束:Java 类名

以下示例代码是写入 Python 的映射器可执行文件。此脚本是 WordCount 示例应用程序的一部分。

#!/usr/bin/python import sys def main(argv): line = sys.stdin.readline() try: while line: line = line.rstrip() words = line.split() for word in words: print "LongValueSum:" + word + "\t" + "1" line = sys.stdin.readline() except "end of file": return None if __name__ == "__main__": main(sys.argv)