Amazon EMR
Amazon EMR 版本指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用 Streaming 处理数据

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 实用工具。

Hadoop 进程

1

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

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

2

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

3

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

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

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

参数 描述 必需
-input

位于输入数据的 Amazon S3 上。

类型:字符串

默认值:无

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

-output

Amazon S3 上的位置,是 Amazon EMR 上传已处理数据的地方。

类型:字符串

默认值:无

约束:URI

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

-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)