在 MapReduce 任务中使用 C++程序
1. 研究背景
Hadoop 是一个主要由 Java 语言开发的项目,基于 Hadoop 的 MapReduce 程序也主要是
使用 Java 语言来编写。但是有一些时候,我们需要在 MapReduce 程序中使用 C 语言、C++
以及其他的语言,比如项目的开发人员更熟悉 Java 之外的语言,或者项目已经有部分功能
用其他语言实现等。针对这些情况,我们需要研究如何在基于 Java 的 MapReduce 程序中引
入其他语言。经过调研,在 MapReduce 任务中使用 C++程序的方法主要有三种:Hadoop
Streaming、Hadoop Pipes 以及 Hadoop JNI。本文将在随后的三个章节分别介绍这三种方法。
2. Hadoop Streaming
先来看一下 Hadoop Streaming。Streaming 是 Hadoop 提供的一个支持使用非 Java 语言
编写 MapReduce 任务程序的接口。通过 Streaming,用户可以使用任何可执行文件、脚本
文件作为 Mapper 和 Reducer。Hadoop Streaming 强制使用了 Unix 的标准输入输出格式作为
Hadoop 和非 Java 编程语言程序的通信格式。Unix 的标准输入输出格式为:每一行为一个
Key/Value 键值对,该行中第一个 tab 之前的部分作为 Key,之后的(不包括 tab)的部分作
为 Value。如果没有 tab,则正行都作为 Key,Value 的值为 Null。至此,在非 Java 编程语言
所写的程序中,只需要将标准输入作为程序的输入,将标准输出作为程序的输出就可以了。
Hadoop Streaming 支持程序语言种类很多,除了常见的 C 语言、C++、Python、Ruby 等,
甚至基本的 shell 命令都可以作为 Streaming 的 Mapper 和 Reducer,下面给出一个以 shell 命
令 Streaming 程序的例子,并以此说明一下 Streaming 的执行方式。
评论9