从wordcount 开始 mapreduce (C++\hadoop streaming模式)
2013-08-24 18:01
579 查看
序:终于开始接触hadoop了,从wordcount开始
1. 采用hadoop streamming模式
优点:支持C++ pathon shell 等多种语言,学习成本较低,不需要了解hadoop内部结构
调试方便:cat input | ./map | sort | ./reduce > output
hadoop 就是提供了一个分布式平台实现了上述脚本的功能,这是一次mapreduce的过程
一个例子:
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值
wordcount_reduce
1. 采用hadoop streamming模式
优点:支持C++ pathon shell 等多种语言,学习成本较低,不需要了解hadoop内部结构
调试方便:cat input | ./map | sort | ./reduce > output
hadoop 就是提供了一个分布式平台实现了上述脚本的功能,这是一次mapreduce的过程
一个例子:
#!/bin/bash source build.env $hadoop_bin fs -rmr $env_root $hadoop_bin fs -mkdir $env_root $hadoop_bin fs -copyFromLocal ./txt $env_root/txt $hadoop_bin streaming \ -jobconf mapred.job.name="word count fuck you man~!" \ -input $env_root/txt \ //map程序的输入:cat input | ./map -output $env_root/outputxt \ //reduce程序的输出 : ./reduce > output -mapper "./wordcount_map"\ -reducer "./wordcount_reducer"\ -file ./wordcount_map\ -file ./wordcount_reducer\ -jobconf mapred.job.map.capacity=1000 \ -jobconf mapred.job.reduce.capacity=1000 \ -jobconf mapred.child.ulimit=20000000 \ -jobconf mapred.job.queue.name=ns-webgis \ -jobconf mapred.job.priority=HIGH \ -jobconf mapred.map.tasks.speculative.execution=false \ -jobconf mapred.map.tasks=10 \ -jobconf mapred.reduce.tasks=2 if [ $? -ne 0 ] then echo "error~~~~" >&2 exit -1 fi $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值
#include<vector> #include<map> #include<string> #include<iostream> using namespace std; void reduce() { string key; string value; string value1; //vector<string> vec(2); map<string,int> mapTemp; while(cin>>key>>value>>value1) { if(mapTemp.find(key)!=mapTemp.end()) mapTemp[key]+=1; else mapTemp[key]=1; } map<string,int>::iterator it = mapTemp.begin(); for(;it!=mapTemp.end();++it) { cout<<it->first<<"\t"<<it->second<<endl; } } int main() { reduce(); }
wordcount_reduce
相关文章推荐
- 从wordcount 开始 mapreduce (C++\hadoop streaming模式)
- hadoop源代码分析(一)从wordCount开始,剖析mapreduce的运行机制
- 【hadoop学习】在伪分布式hadoop上实践word count程序——c/c++ streaming版本(未完)
- [hadoop源码阅读][9]-mapreduce-从wordcount开始
- Python+Hadoop Streaming实现MapReduce(word count)
- hadoop的c++版wordcount例子(streaming方式)
- hadoop源代码分析(二)从wordCount开始,剖析mapreduce的运行机制
- Python+Hadoop Streaming实现MapReduce(word count)
- python基于Hadoop Streaming实现简单的WordCount
- hadoop学习-wordcount程序c++重写执行
- hadoop mapreduce 之 word count(mapreduce初探)
- 用Hadoop Streaming来写wordcount
- mapreduce中wordcount详细介绍(包括hadoop1和hadoop2版本)
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-配置Hadoop伪分布模式并运行Wordcount示例(1)
- Hadoop MapReduce WordCount v2.0结合个人理解进行注释
- Windows下以Local模式调试SparkStreaming的WordCount例子
- Hadoop MapReduce编程 API入门系列之wordcount版本4(八)
- hadoop mapreduce 之wordcount 编译执行
- HADOOP(1)__Mapreduce_WordCount统计单词数
- 初学Hadoop之图解MapReduce与WordCount示例分析