转自:https://www.linuxidc.com/Linux/2012-04/58991.htm

今天尝试用C语言在Hadoop上编写统计单词的程序,具体过程如下:

一、编写map和reduce程序

mapper.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define BUF_SIZE    2048
  5. #define DELIM       '\n'
  6. int main(int argc, char * argv[])
  7. {
  8. char buffer[BUF_SIZE];
  9. while(fgets(buffer,BUF_SIZE-1,stdin))
  10. {
  11. int len = strlen(buffer);
  12. if(buffer[len-1] == DELIM) // 将换行符去掉
  13. buffer[len-1] = 0;
  14. char *query = NULL;
  15. query = strtok(buffer, " ");
  16. while(query)
  17. {
  18. printf("%s\t1\n",query);
  19. query = strtok(NULL," ");
  20. }
  21. }
  22. return 0;
  23. }

reducer.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define BUFFER_SIZE     1024
  5. #define DELIM       "\t"
  6. int main(int argc, char * argv[])
  7. {
  8. char str_last_key[BUFFER_SIZE];
  9. char str_line[BUFFER_SIZE];
  10. int count = 0;
  11. *str_last_key = '\0';
  12. while( fgets(str_line,BUFFER_SIZE-1,stdin) )
  13. {
  14. char * str_cur_key = NULL;
  15. char * str_cur_num = NULL;
  16. str_cur_key = strtok(str_line,DELIM);
  17. str_cur_num = strtok(NULL,DELIM);
  18. if(str_last_key[0] =='\0')
  19. {
  20. strcpy(str_last_key,str_cur_key);
  21. }
  22. if(strcmp(str_cur_key, str_last_key))// 前后不相等,输出
  23. {
  24. printf("%s\t%d\n",str_last_key,count);
  25. count = atoi(str_cur_num);
  26. }else{// 相等,则加当前的key的value
  27. count += atoi(str_cur_num);
  28. }
  29. strcpy(str_last_key,str_cur_key);
  30. }
  31. printf("%s\t%d\n",str_last_key,count);
  32. return 0;
  33. }

二、编译

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 语言编程【转】的更多相关文章

  1. 在Linux上使用C语言编程获取IPv4地址及子网掩码

    在Linux上(如Ubuntu或CentOS), 获取某个Network Interface比如eth0的IP地址等信息,我们可以使用ifconfig或者ip addr show命令. $ ifcon ...

  2. 课上补做:用C语言编程实现ls命令

    课上补做:用C语言编程实现ls命令 一.有关ls ls :用来打印当前目录或者制定目录的清单,显示出文件的一些信息等. ls -l:列出长数据串,包括文件的属性和权限等数据 ls -R:连同子目录一同 ...

  3. MapReduce编程模型及其在Hadoop上的实现

    转自:https://www.zybuluo.com/frank-shaw/note/206604 MapReduce基本过程 关于MapReduce中数据流的传输过程,下图是一个经典演示:  关于上 ...

  4. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  5. 个人c语言编程风格总结

    总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...

  6. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  7. 混合语言编程:启用CLR(公共语言运行时编译)让C#调用C++

    前言 关于混合C#和C++的编程方式,本人之前写过一篇博客(参见混合语言编程:C#使用原生的Directx和OpenGL),在之前的博客中,介绍了在C#的Winform和WPF下使用原生的Direct ...

  8. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  9. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

随机推荐

  1. 第一Sprint阶段回复其他各组对我组提出的意见

    组号  组名 组名 对我组提出的意见 对各组的回复 1   理财猫 1.虚拟机和手机端的交互是否能扩展到整个学校 2.每次都需要老师输入作业内容吗 3.操作过于繁琐  多谢你们的建议,老师可以选择输入 ...

  2. C#ToString() 格式化数值

    格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符,控制格式化输出的有效位数或小数位数. 格式说明符 说明 示例 输出 C 货币 2.5.ToString(&q ...

  3. pandas读取csv数据时设置index

    比如读取数据时想把第一列设为index,那么只需要简单的 pd.read_csv("new_wordvecter.csv",index_col=[0]) 这里index_col可以 ...

  4. linux 开机直接进入命令行

    一.图形界面和命令行切换 linux系统在启动图形化界面后,可以在图形界面和命令行之间来回切换,linux提供了6个命令行终端(terminal或Console),分别为tty1——tty6,使用Ct ...

  5. spring注入 属性注入 构造器注入 set方法注入

    spring注入 属性注入 构造器注入 set方法注入(外部bean注入)

  6. codeforces1A

    Theatre Square CodeForces - 1A 一个城市的广场面积有 N×M平方米,过段时间,恰逢这个城市的庆典活动,主办方决定在广场上铺设一种新的地砖,这种地砖每块都是a×a平方米的. ...

  7. [SDOI2017]硬币游戏

    考虑生成函数来做 g(x)函数就是0+0*x+...+1*x^s+...+|∑|^(n-s)x^n 就是最后s位必须填这个串,但是前面随便填的方案数 然后枚举之前出现了哪个串(包括自己),如果没有相交 ...

  8. 《剑指offer》— JavaScript(27)字符串的排列

    字符串的排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. ...

  9. 将句子表示为向量(上):无监督句子表示学习(sentence embedding)

    1. 引言 word embedding技术如word2vec,glove等已经广泛应用于NLP,极大地推动了NLP的发展.既然词可以embedding,句子也应该可以(其实,万物皆可embeddin ...

  10. python的WSGI接口

    WSGI:Web Server Gateway Interface. WSGI是为python语言定义的web服务器和web应用程序或框架之间的一种简单而实用的接口.wsgi是一个web组件的接口规范 ...