Process Data with Streaming - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Process Data with 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

Using the Hadoop Streaming Utility

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

1

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

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

2.

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

3

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

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

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

参数: Description 必填
input

位于输入数据的 Amazon S3 上。

Type :字符串

默认值:无

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

output

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

Type :字符串

默认值:无

Constraint URI

默认值:如果未指定某个位置, Amazon EMR 将数据上传到 input.

-mapper

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

Type :字符串

默认值:无

-reducer

Reducer 可执行文件的名称。

Type :字符串

默认值:无

-cacheFile

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

Type :字符串

默认值:无

Constraints [uri]#[在工作目录中创建的symlink名称]

-cacheArchive

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

Type :字符串

默认值:无

Constraints [uri]#[在工作目录中创建的symlink目录名称

-combiner

合并结果

Type :字符串

默认值:无

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