【hadoop2.6.0】用C++ 编写mapreduce
hadoop通过hadoop streaming 来实现用非Java语言写的mapreduce代码。 对于一个一点Java都不会的我来说,这真是个天大的好消息。
官网上hadoop streaming的介绍在:http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/HadoopStreaming.html
我们用wordcount的例子来说明,输入文件我用的是从网上下载的哈利波特第七部的英文版,命名为h.txt
用C++写map程序,只要能够从标准输入中读取信息,并且能用标准输出来输出<key, value>键值对就行。
对于wordcount单词计数来说,map程序非常简单,只要把每个单词分别输出 后面再输出个1就行, 表示每个单词出现了1次
wordcount_map.cpp程序如下:
#include <iostream>
#include <string>
using namespace std; int main(int argc, char** argv)
{
string word;
while(cin >> word)
{
cout << word << "/t" << "" << endl;
}
return ;
}
reduce程序要能够读取map的输出键值对,并且把key值(单词)相同的键值对做整合,并且输出整合后结果
wordcount_reduce.cpp程序如下:
#include <iostream>
#include <string>
#include <map>
using namespace std; int main(int argc, char** argv)
{
string key, num;
map<string, int> count;
map<string, int>::iterator it;
while(cin >> key >> num)
{
it = count.find(key);
if(it != count.end())
{
it->second++;
}
else
{
count.insert(make_pair(key, ));
}
} for(it = count.begin(); it != count.end(); it++)
{
cout << it->first << "/t" << it->second << endl;
}
return ;
}
把两个.cpp文件编译为可执行文件,并且把这两个可执行文件放在hadoop根目录下
g++ -o mapperC wordcount_map.cpp
g++ -o reduceC wordcount_reduce.cpp
上传待处理文件h.txt到 hdfs 的 /user/kzy/input中
bin/hdfs dfs -put h.txt /user/kzy/input
要运行hadoop streaming需要hadoop-streaming-2.6.0.jar,位置在hadoop-2.6.0/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar 开始我各种运行不了,就是因为新版本里面文件的位置和以前不一样了。
执行mapreduce,里面的选项我并不是完全理解,但是这样可以正常运行。 注意,老版本里的-jobconf 已经改名叫 -D 了
bin/hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.6..jar \
-D mapred.job.name="word count~" \
-input /user/kzy/input/h.txt
-output /user/output/c++_out \
-mapper ./mapperC \
-reducer ./reduceC \
-file mapperC -file reduceC
查看结果,sort中 -k 2 表示用以tab为分隔符的第二个字段来排序 -n表示用数字形式排序 -r表示从大到小排序 显示结果前20行
bin/hadoop dfs -cat /user/output/c++_out/* | sort -k 2 -n -r|head -20
结果如下:

【hadoop2.6.0】用C++ 编写mapreduce的更多相关文章
- 国内最全最详细的hadoop2.2.0集群的MapReduce的最简单配置
简介 hadoop2的中的MapReduce不再是hadoop1中的结构已经没有了JobTracker,而是分解成ResourceManager和ApplicationMaster.这次大变革被称为M ...
- Hadoop2.2.0 第一步完成MapReduce wordcount计算文本数量
1.完成Hadoop2.2.0单机版环境搭建之后需要利用一个例子程序来检验hadoop2 的mapreduce的功能 //启动hdfs和yarn sbin/start-dfs.sh sbin/star ...
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置
目的 这份文档描写叙述了怎样安装.配置和管理从几个节点到有数千个节点的Hadoop集群. 玩的话,你可能想先在单机上安装.(看单节点配置). 准备 从Apache镜像上下载一个Hadoop的稳定版本号 ...
- Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度
目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器,同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法.以致到最后 ...
- Hadoop-2.2.0中文文档—— MapReduce下一代- 可插入的 Shuffle 和 Sort
简单介绍 可插入的 shuffle 和 sort 功能,同意在shuffle 和 sort 逻辑中用可选择的实现类替换.这个情况的样例是:用一个不是HTTP的应用协议,如RDMA来 shuffle 从 ...
- Hadoop-2.2.0中文文档—— MapReduce 下一代 - Encrypted Shuffle
简单介绍 Encrypted Shuffle capability (加密洗牌功能? )同意用HTTPS 和 可选的client验证 (也称作双向的 HTTPS, 或有client证书的 HTTPS) ...
- Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
目的 这份文档描写叙述 CapacityScheduler,一个为Hadoop能同意多用户安全地共享一个大集群的插件式调度器,如他们的应用能适时被分配限制的容量. 概述 CapacitySchedul ...
- 【hadoop2.6.0】一句话形容mapreduce
网上看到的: We want to count all the books in the library. You count up shelf #1, I count up shelf #2. Th ...
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...
随机推荐
- 同一个tomcat多个web应用共享session
tomcat版本:apache-tomcat-6.0.29(次方tomcat6和tomcat7支持) 1.修改D:\apache-tomcat-6.0.29\conf\server.xml文件 ...
- C++学习——类的继承
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- HDU 1954 Subway tree systems (树的最小表示法)
题意:用一个字符串表示树,0代表向下走,1代表往回走,求两棵树是否同构. 分析:同构的树经过最小表示会转化成两个相等的串. 方法:递归寻找每一棵子树,将根节点相同的子树的字符串按字典序排列,递归回去即 ...
- 【风马一族_C】进制转化
#include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...
- DIV_ROUND_UP(x,y)实现x/y向上取整
#define DIV_ROUND_UP(x,y) (((x) + ((y) - 1)) / (y)) 1.问题 x.y都是整数,且x > 1, y > 1,求 x / y的向上取整,即: ...
- 一款仿PBA官网首页jQuery焦点图的切换特效
一款仿PBA官网首页jQuery焦点图的切换特效,非常的简单大方, 在对浏览器兼容性的方面做了不少的功夫.IE6也勉强能过去. 还是一款全屏的焦点图切换特效.大气而清新.很适合简介大方的网站. 下图还 ...
- 转:关于Apache与Nginx的优势比较(经典)
不断有人跟我说Nginx比Apache好.比Apache快之类.Nginx更主要是作为反向代理,而非Web服务器使用.我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx ...
- C++安装失败解决办法
法一:删除注册表中的HKY_LOCAL_MACHINE\\SYSTEM|ControlSet001\\Services\\VSS,卸载重装.法二:点击 setup目录下的 wpie15.exe .. ...
- Linux驱动开发之开篇--HelloWorld
Linux驱动的编写,大致分为两个过程,第一个过程为测试阶段,即为某一具体的设备,添加必要的驱动模块,为了节省编译时间,需要将代码单独放在一处,在编译时,只需要要调用内核的头文件即可:第二个过程为布置 ...
- 《.NET简单企业应用》技术路线
前言 工作三年了,一直从事基于.NET体系的企业应用开发,心得和经验也攒了点:担心时间长了给忘了,所以得给写下来,以便以后回味回味:更重要的是能让知识系统化和体系化. 本系列以一个简单的企业应用系统为 ...