序:终于开始接触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<iostream>
#include<string>
#include<vector>
using namespace std;
void split(string src,vector<string>& dest,string separator)
{
string str = src;
string substring;
string::size_type start = , index; do
{
index = str.find_first_of(separator,start);
if (index != string::npos)
{
substring = str.substr(start,index-start);
dest.push_back(substring);
start = str.find_first_not_of(separator,index);
if (start == string::npos) return; }
}while(index != string::npos);
substring = str.substr(start);
dest.push_back(substring);
}
void map()
{
string line;
vector<string> vec();
while(cin>>line)
{
vec.clear();
split(line,vec," ");
vector<string>::iterator it=vec.begin();
for(;it!=vec.end();++it)
{
cout<<*it<<"\t"<<""<<"\t"<<"fuck"<<endl;
}
}
}
int main()
{
map();
}

wordcount_map

3. reduce: sort  |  ./reduce > output

等到所有的map任务都结束:

1)hadoop平台做了这些事情

a.将所有的map程序的输出结果中key相同的key value pair 放到相同的节点上,这点很重要,这是保证最终输出结果正确的保证,后面会按照key进行hash , 并且相同                 key之间不会有其他的key,其实是按照key值做了一个排序

注意:相同的key一定在一个节点上,但是一个节点上不止有一个个key

b 然后在各个节点上开始reduce任务

2)自己写的wordcount_map做了什么

a. 读取这些具有相同key的键值对,处理自己的业务逻辑,此处就是将统计相同的key值的键值对一共出现了几次,然后将结果输出,此处也是标准输入和标准输出

#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]+=;
else
mapTemp[key]=;
}
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模式)的更多相关文章

  1. Hadoop streaming模式获取jobconf参数

    1. 像map_input_file这种环境变量是在hadoop-streaming.jar程序中设置的,所以无需-cmdenv map_input_file参数就可以在php中直接引用,如$var= ...

  2. 从Hadoop骨架MapReduce在海量数据处理模式(包括淘宝技术架构)

    从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇.而神奇的东西常能勾 ...

  3. Hadoop单机模式安装-(3)安装和配置Hadoop

    网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍在Ubuntu安装完 ...

  4. Hadoop单机模式安装

    一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: ...

  5. Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    包括:    Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...

  6. 3-1.Hadoop单机模式安装

    Hadoop单机模式安装 一.实验介绍 1.1 实验内容 hadoop三种安装模式介绍 hadoop单机模式安装 测试安装 1.2 实验知识点 下载解压/环境变量配置 Linux/shell 测试Wo ...

  7. 安装部署Apache Hadoop (本地模式和伪分布式)

    本节内容: Hadoop版本 安装部署Hadoop 一.Hadoop版本 1. Hadoop版本种类 目前Hadoop发行版非常多,有华为发行版.Intel发行版.Cloudera发行版(CDH)等, ...

  8. 大数据学习之Hadoop运行模式

    一.Hadoop运行模式 (1)本地模式(默认模式): 不需要启用单独进程,直接可以运行,测试和开发时使用. (2)伪分布式模式: 等同于完全分布式,只有一个节点. (3)完全分布式模式: 多个节点一 ...

  9. hadoop单击模式环境搭建

    一 安装jdk 下载相应版本的jdk安装到相应目录,我的安装目录是/usr/lib/jdk1.8.0_40 下载完成后,在/etc/profile中设置一下环境变量,在文件最后追加如下内容 expor ...

随机推荐

  1. Linux 中 x86 的内联汇编

    工程中需要用到内联汇编,找到一篇不错的文章,趁机学习下. 原文地址:http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ 如果 ...

  2. Tkinter教程之Button篇(1)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811298 #Tkinter教程之Button篇(1)#Button功能触发事件'''1.一个 ...

  3. Spring Framework 中启动 Redis 事务操作

    背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...

  4. Spark计算工作流

    下图 中描述了 Spark 的输入.运行转换.输出.在运行转换中通过算子对 RDD进行转换.算子是 RDD 中定义的函数,可以对 RDD 中的数据进行转换和操作.‰ 输入:在 Spark 程序运行中, ...

  5. jquery easyui的扩展验证

    1.扩展通过$.extends($.fn.validatebox.defaults.rules,)扩展 $.extend( $.fn.validatebox.defaults.rules, { idc ...

  6. TextKit学习(三)NSTextStorage,NSLayoutManager,NSTextContainer和UITextView

    先上一张图: 这是使用UITextView时用到的iOS7新增加的类:NSTextContainer.NSLayoutManager.NSTextStorage及其相互关系: 这三个新出的类还没有在官 ...

  7. Light oj 1234 - Harmonic Number

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1234 给你一个数n,让你求 这个要是直接算的话肯定TLE,要是用1e8的数组预处理存储 ...

  8. 【Java】C/C++与Java的简单比较

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827273.html     C/C++:            编译(不同的系统编译出不同的机器码,所以同一 ...

  9. poj 3501 Escape from Enemy Territory 二分+bfs

    水题,不解释. #include<stdio.h> #include<math.h> #include<cstring> #include<algorithm ...

  10. DX相机变换矩阵推导

    网上很多的推导过程都是错的,所以写一个. 先平移,再旋转就可以,先平移的原因是,如果先旋转的话,坐标系已经改了,所以先平移. 平移的变换和相机的变换是相反的,所以是: 平移完成后,相机的位置就和原点的 ...