没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
11页
Hadoop是一个主要由Java语言开发的项目,基于Hadoop的MapReduce程序也主要是使用Java语言来编写。但是有一些时候,我们需要在MapReduce程序中使用C语言、C++以及其他的语言,比如项目的开发人员更熟悉Java之外的语言,或者项目已经有部分功能用其他语言实现等。针对这些情况,我们需要研究如何在基于Java的MapReduce程序中引入其他语言。经过调研,在MapReduce任务中使用C++程序的方法主要有三种:Hadoop Streaming、Hadoop Pipes以及Hadoop JNI。
资源推荐
资源详情
资源评论
在 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 的执行方式。
图 2-1 Hadoop Streaming 使用 Shell 的例子
其 中 hadoop-streaming.jar 是 Hadoop 提 供 的 Streaming 工 具 , -input 和 -
output 分别指定了输入和输出的目录,-mapper 和-reducer 分别指定了 cat 和 wc 作为
Mapper 和 Reducer 的程序。Hadoop-streaming.jar 的详细参数如图 2-2 所示。
图 2-2 Hadoop-Streaming 的参数列表
除了之前例子中用到的参数外,-combiner 也是比较常用的参数,用来指定 combiner
程序;-'le 用来指定 Mapper、Reducer 需要用到的配置文件、字典等;还有一个-D 参数,
用来指定任务的参数比如 mapper 的个数,分隔符的定义等。Streaming 的原理如图 2-1 所
示。
图 2-1 Hadoop Streaming 的原理
下面使用一个 C++实现的 WordCount 的例子,来说明基于 Hadoop Streaming 的 C++程序
写法。
Mapper 程序:
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main(){
string key;
string value = "1";
while(cin>>key){
cout<<key<<"\t"<<value<<endl;
}
return 0;
}
Reducer 程序:
#include <string>
剩余10页未读,继续阅读
xuwaye
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 双H桥电机驱动L298N芯片AD集成库ALTIUM库(原理图库+PCB封装库)文件.zip
- 555springboot + vue 线上教学平台.zip(可运行源码+数据库文件+文档)
- 554springcloud + vue 房产销售平台.zip(可运行源码+数据库文件+文档)
- 小霸王坦克游戏源码.7z
- 蓝桥杯单片机基础学习项目(LED,数码管,蜂鸣器,继电器,按键控制)
- 553springboot + vue 某银行OA系统.zip(可运行源码+数据库文件+文档)
- DatabaseWatermarkingBasedonTextFormat
- yolov8常用二维码检测检测+数据集
- -移动通信-网络课程设计与研究
- 基于Python的PCA人脸识别算法的原理及实现代码+文档详解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页