Hadoop 上使用C 语言编程【转】
转自:https://www.linuxidc.com/Linux/2012-04/58991.htm
今天尝试用C语言在Hadoop上编写统计单词的程序,具体过程如下:
一、编写map和reduce程序
mapper.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define BUF_SIZE 2048
- #define DELIM '\n'
- int main(int argc, char * argv[])
- {
- char buffer[BUF_SIZE];
- while(fgets(buffer,BUF_SIZE-1,stdin))
- {
- int len = strlen(buffer);
- if(buffer[len-1] == DELIM) // 将换行符去掉
- buffer[len-1] = 0;
- char *query = NULL;
- query = strtok(buffer, " ");
- while(query)
- {
- printf("%s\t1\n",query);
- query = strtok(NULL," ");
- }
- }
- return 0;
- }
reducer.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define BUFFER_SIZE 1024
- #define DELIM "\t"
- int main(int argc, char * argv[])
- {
- char str_last_key[BUFFER_SIZE];
- char str_line[BUFFER_SIZE];
- int count = 0;
- *str_last_key = '\0';
- while( fgets(str_line,BUFFER_SIZE-1,stdin) )
- {
- char * str_cur_key = NULL;
- char * str_cur_num = NULL;
- str_cur_key = strtok(str_line,DELIM);
- str_cur_num = strtok(NULL,DELIM);
- if(str_last_key[0] =='\0')
- {
- strcpy(str_last_key,str_cur_key);
- }
- if(strcmp(str_cur_key, str_last_key))// 前后不相等,输出
- {
- printf("%s\t%d\n",str_last_key,count);
- count = atoi(str_cur_num);
- }else{// 相等,则加当前的key的value
- count += atoi(str_cur_num);
- }
- strcpy(str_last_key,str_cur_key);
- }
- printf("%s\t%d\n",str_last_key,count);
- return 0;
- }
二、编译
gcc mapper.c -o mapper
gcc reducer.c -o reducer
三、运行
(一)启动hadoop后将待统计单词的输入文件放到 input文件夹中:bin/hadoop fs -put 待统计文件 input
(二)使用contrib/streaming/下的jar工具调用上面的mapper\reducer:
bin/hadoop jar /home/huangkq/Desktop/hadoop/contrib/streaming/hadoop-streaming-0.20.203.0.jar -mapper /home/huangkq/Desktop/hadoop2/mapper -reducer /home/huangkq/Desktop/hadoop2/reducer -input input -output c_output -jobconf mapred.reduce.tasks=2
说明:hadoop-streaming-0.20.203.0.jar是一个管道工具
(三)查看结果:bin/hadoop fs -cat c_output/*
Hadoop 上使用C 语言编程【转】的更多相关文章
- 在Linux上使用C语言编程获取IPv4地址及子网掩码
在Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令. $ ifcon ...
- 课上补做:用C语言编程实现ls命令
课上补做:用C语言编程实现ls命令 一.有关ls ls :用来打印当前目录或者制定目录的清单,显示出文件的一些信息等. ls -l:列出长数据串,包括文件的属性和权限等数据 ls -R:连同子目录一同 ...
- MapReduce编程模型及其在Hadoop上的实现
转自:https://www.zybuluo.com/frank-shaw/note/206604 MapReduce基本过程 关于MapReduce中数据流的传输过程,下图是一个经典演示: 关于上 ...
- JVM 平台上的各种语言的开发指南
JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...
- 个人c语言编程风格总结
总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++
前言 关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
随机推荐
- Struts2中 radio标签的详细使用方法
首先在页面中引入struts标签库: <%@ taglib prefix="s" uri="/struts-tags"%> 在JSP页面中创建单选按 ...
- final评论2
1-约跑APP 小组准备的非常的充分,还带了摄像头,整个发布过程清晰很多.可能是由于上次发布时没有完全展现出自己组的作品,所以这次发布做了充分的准备,本组重点放在了修改其他组发现的bug,团队的约跑项 ...
- Win7(及以后版本) 高级搜索 AND OR NOT 正则
http://www.cnblogs.com/include/archive/2011/08/23/2150594.html TIP:语法容易混淆,容易误用用C系列语法 & | !等,其实是S ...
- redis集群的测试
原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ,redis-cli - ...
- [转帖]Git数据存储的原理浅析
Git数据存储的原理浅析 https://segmentfault.com/a/1190000016320008 写作背景 进来在闲暇的时间里在看一些关系P2P网络的拓扑发现的内容,重点关注了Ma ...
- [转帖]Portainer -- Docker可视化管理工具的安装配置及使用
原贴地址:https://blog.csdn.net/A632189007/article/details/78779920 Portainer介绍 Portainer是Docker的图形化管理工具, ...
- OneZero第二周第二次站立会议(2016.3.29)
会议时间:2016年3月29日 13:05~13:16 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容或分配下一步任务. 会议内容:以下是会议插图 1 ...
- 洛谷P4831 Scarlet loves WenHuaKe
这道题告诉我们推式子的时候头要够铁. 题意 问一个\(n\times m\)的棋盘,摆上\(n\times 2\)个中国象棋的炮使其两两不能攻击的方案数,对\(998244353\)取模. \((n\ ...
- 2017-12 CDQZ集训(已完结)
从联赛活了下来(虽然分数倒一……),接下来要去CDQZ集训啦…… DAY -2 2017-12-16 被老师安排负责一部分同学的住宿以及安排…… 抓紧时间继续学习,LCT真好玩啊真好玩…… 晚上放假了 ...
- Emacs 安装配置使用教程
Emacs 安装配置使用教程 来源 https://www.jianshu.com/u/a27b97f900f7 序|Preface 先来一篇有趣的简介:Emacs和Vim:神的编辑器和编辑器之神 - ...