欢迎来到天天文库
浏览记录
ID:37899588
大小:140.50 KB
页数:5页
时间:2019-06-02
《WordCount Hadoop计数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、HadoopStreaming是Hadoop提供的多语言编程工具,通过该工具,用户可采用任何语言编写MapReduce程序,本文将介绍几个HadoopStreaming编程实例,大家可重点从以下几个方面学习:(1)对于一种编写语言,应该怎么编写Mapper和Reduce,需遵循什么样的编程规范(2)如何在HadoopStreaming中自定义HadoopCounter(3)如何在HadoopStreaming中自定义状态信息,进而给用户反馈当前作业执行进度(4)如何在HadoopStreaming中打印调试日志,在哪里可以看
2、到这些日志(5)如何使用HadoopStreaming处理二进制文件,而不仅仅是文本文件我已经在多篇文章中介绍了HadoopStreaming,如果你对它还不了解,可以阅读:“HadoopStreaming编程”,“HadoopStreaming高级编程”等文章。本文重点解决前四个问题,给出了C++和Shell编写的Wordcount实例,供大家参考。1.C++版WordCount(1)Mapper实现(mapper.cpp)12345678910111213141516#include#include<
3、string>usingnamespacestd;intmain(){ stringkey; while(cin>>key){ cout<4、....."; //Printlogsfortesting cerr<<"Thisislog,willbeprintedinstdoutfile"; } return0;}(2)Reducer实现(reducer.cpp)12#include#include345678910111213141516171819202122 usingnamespacestd;intmain(){//reducer将会被封装成一个独立进程,因而需要有main函数 stringcur5、_key,last_key,value; cin>>cur_key>>value; last_key=cur_key; intn=1; while(cin>>cur_key){//读取maptask输出结果 cin>>value; if(last_key!=cur_key){//识别下一个key cout<6、;//key值相同的,累计value值 } } cout<7、./mapper8、sort9、./reducer注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别reporter:counter10、:counter_group,counter_no,1reporter:status:processing……Thisislog,willbeprintedinstdoutfile测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):12#!/bin/bashHADOOP_HOME=/opt/yarn-client34567891011121314INPUT_PATH=/test/inputOUTPUT_PATH=/test/outputecho"Clearingoutputpath:$OUTPUT_P11、ATH"$HADOOP_HOME/bin/hadoopfs-rmr$OUTPUT_PATH ${HADOOP_HOME}/bin/hadoopjar ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
4、....."; //Printlogsfortesting cerr<<"Thisislog,willbeprintedinstdoutfile"; } return0;}(2)Reducer实现(reducer.cpp)12#include#include345678910111213141516171819202122 usingnamespacestd;intmain(){//reducer将会被封装成一个独立进程,因而需要有main函数 stringcur
5、_key,last_key,value; cin>>cur_key>>value; last_key=cur_key; intn=1; while(cin>>cur_key){//读取maptask输出结果 cin>>value; if(last_key!=cur_key){//识别下一个key cout<6、;//key值相同的,累计value值 } } cout<7、./mapper8、sort9、./reducer注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别reporter:counter10、:counter_group,counter_no,1reporter:status:processing……Thisislog,willbeprintedinstdoutfile测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):12#!/bin/bashHADOOP_HOME=/opt/yarn-client34567891011121314INPUT_PATH=/test/inputOUTPUT_PATH=/test/outputecho"Clearingoutputpath:$OUTPUT_P11、ATH"$HADOOP_HOME/bin/hadoopfs-rmr$OUTPUT_PATH ${HADOOP_HOME}/bin/hadoopjar ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
6、;//key值相同的,累计value值 } } cout<7、./mapper8、sort9、./reducer注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别reporter:counter10、:counter_group,counter_no,1reporter:status:processing……Thisislog,willbeprintedinstdoutfile测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):12#!/bin/bashHADOOP_HOME=/opt/yarn-client34567891011121314INPUT_PATH=/test/inputOUTPUT_PATH=/test/outputecho"Clearingoutputpath:$OUTPUT_P11、ATH"$HADOOP_HOME/bin/hadoopfs-rmr$OUTPUT_PATH ${HADOOP_HOME}/bin/hadoopjar ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
7、./mapper
8、sort
9、./reducer注:上面这种测试方法会频繁打印以下字符串,可以先注释掉,这些字符串hadoop能够识别reporter:counter
10、:counter_group,counter_no,1reporter:status:processing……Thisislog,willbeprintedinstdoutfile测试通过后,可通过以下脚本将作业提交到集群中(run_cpp_mr.sh):12#!/bin/bashHADOOP_HOME=/opt/yarn-client34567891011121314INPUT_PATH=/test/inputOUTPUT_PATH=/test/outputecho"Clearingoutputpath:$OUTPUT_P
11、ATH"$HADOOP_HOME/bin/hadoopfs-rmr$OUTPUT_PATH ${HADOOP_HOME}/bin/hadoopjar ${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
此文档下载收益归作者所有