设为首页 收藏本站
查看: 1825|回复: 0

[经验分享] 从wordcount 开始 mapreduce (C++\hadoop streaming模式)

[复制链接]

尚未签到

发表于 2015-7-12 10:35:57 | 显示全部楼层 |阅读模式
  序:终于开始接触hadoop了,从wordcount开始
  1. 采用hadoop streamming模式
  优点:支持C++ pathon shell 等多种语言,学习成本较低,不需要了解hadoop内部结构
  调试方便:cat input | ./map | sort | ./reduce > output
  hadoop 就是提供了一个分布式平台实现了上述脚本的功能,这是一次mapreduce的过程
  一个例子:



1 #!/bin/bash
2 source build.env
3 $hadoop_bin fs -rmr $env_root   
4 $hadoop_bin fs -mkdir $env_root
5 $hadoop_bin fs -copyFromLocal ./txt  $env_root/txt
6 $hadoop_bin streaming \
7         -jobconf mapred.job.name="word count fuck you man~!" \
8         -input  $env_root/txt \       //map程序的输入:cat input | ./map
9         -output $env_root/outputxt \  //reduce程序的输出 : ./reduce > output
10         -mapper "./wordcount_map"\
11         -reducer "./wordcount_reducer"\
12         -file    ./wordcount_map\
13         -file    ./wordcount_reducer\
14         -jobconf mapred.job.map.capacity=1000 \
15         -jobconf mapred.job.reduce.capacity=1000 \
16         -jobconf mapred.child.ulimit=20000000 \
17         -jobconf mapred.job.queue.name=ns-webgis \
18         -jobconf mapred.job.priority=HIGH \
19         -jobconf mapred.map.tasks.speculative.execution=false \
20         -jobconf mapred.map.tasks=10 \
21         -jobconf mapred.reduce.tasks=2
22 if [ $? -ne 0 ]
23 then
24     echo "error~~~~" >&2
25     exit -1
26 fi
27 $hadoop_bin fs -get $env_root/outputxt .
  2. map :cat input | ./map >> temp
  1)hadoop平台做了什么:
  a.切分文件:把input文件按照一定的策略切割分成若干个小文件
  b.将若干个小文件分别分发到不同节点上
  c. 每个节点上都有一个map程序,然后将任务分发到不同的节点上
  2)自己要写的wordcount_map要做什么:
  wordcount_map从input中按行进行读取,然后按照业务逻辑将读取到的内容拼成 key \t value的形式  ,这个输出将会作为reduce程序的输入
  在这里输出的是 word 1  此处 word是key  1是value
  注意:此处是标准输出、输入 std::cout std::cin  in C++
  key与value之间用\t分割,第一个\t之前的值作为key,之后的都作为value 注意:这个key会被hadoop平台用到 平台不关注value值


DSC0000.gif DSC0001.gif


1 #include
2 #include
3 #include
4 using namespace std;
5 void split(string src,vector& dest,string separator)
6 {
7    string str = src;
8    string substring;
9    string::size_type start = 0, index;
10
11    do
12    {
13        index = str.find_first_of(separator,start);
14        if (index != string::npos)
15        {   
16          substring = str.substr(start,index-start);
17          dest.push_back(substring);
18          start = str.find_first_not_of(separator,index);
19          if (start == string::npos) return;                                                                         }   
20    }while(index != string::npos);
21    substring = str.substr(start);
22    dest.push_back(substring);
23 }
24 void map()
25 {
26     string line;
27     vector vec(2);
28     while(cin>>line)
29     {
30         vec.clear();
31         split(line,vec," ");
32         vector::iterator it=vec.begin();
33         for(;it!=vec.end();++it)
34         {
35             cout

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-85726-1-1.html 上篇帖子: ubuntu 12.04配置hadoop(二) 下篇帖子: spring-hadoop之操作hbase
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表