您的位置:首页 > 编程语言 > C语言/C++

从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的过程

一个例子:

#!/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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: