2. MapReduce 简介

MapReduce 实际上是分为两个过程

  1. map 过程 : 数据的读取
  2. reduce 过程 : 数据的计算

并行计算是一个非常复杂的过程, mapreduce是一个并行框架。

在Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job又可以分为两种阶段:map阶段和reduce阶段。这两个阶段分别用两个函数表示,即map函数和reduce函数

我们可以看下典型的官方列子

开发

用idea 开发开发

pom.xml 添加依赖

<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>

写代码:

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapred.*;

import java.io.IOException;

import java.util.Iterator;

import java.util.StringTokenizer;

/**

  • Created by diwu.sld on 2016/4/13.

    */

    public class WordCount{

    public static class CountMap extends MapReduceBase

    implements Mapper<LongWritable, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);

    private Text word = new Text();

     public void map(LongWritable longWritable,
    Text text,
    OutputCollector<Text, IntWritable> outputCollector,
    Reporter reporter) throws IOException {
    String line = text.toString();
    StringTokenizer tokenizer = new StringTokenizer(line); while(tokenizer.hasMoreTokens()){
    word.set(tokenizer.nextToken());
    outputCollector.collect(word, one);
    }
    }

    }

    public static class CountReduce extends MapReduceBase implements

    Reducer<Text, IntWritable, Text, IntWritable> {

    public void reduce(Text key, Iterator values,

    OutputCollector<Text, IntWritable> output, Reporter reporter)

    throws IOException {

    int sum = 0;

    while (values.hasNext()) {

    sum += values.next().get();

    }

    output.collect(key, new IntWritable(sum));

    }

    }

    public static void main(String[] args) throws Exception {

    JobConf conf = new JobConf(WordCount.class);

    conf.setJobName("wordcount");

     conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(CountMap.class);
    conf.setCombinerClass(CountReduce.class);
    conf.setReducerClass(CountReduce.class); conf.setInputFormat(TextInputFormat.class);
    conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0]));
    FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf);

    }

    }

然后打好包 HadoopDemo:

1. Project Sturcture->Artifacts->+
2. Build Artifacts

放到 hadoop 目录下运行

运行

  1. bin/hadoop fs -mkdir -p input
  2. bin/hadoop fs -copyFromLocal README.txt input
  3. bin/hadoop jar demos/HadoopDemo.jar WorldCount input output
  4. bin/hadoop fs -cat output/* 或者bin/hadoop fs -ls output
  5. bin/hadoop fs -cat output/part-r-00000

总结

如果有N个文件,和对这个N个文件的计算,我们可以用并行来提高运行效率。但是文件有大有小, 计算量有多又少, 如何进行并行和分配任务是一个非常繁琐的事情。 所以有了Hadoop这个并行框架来解决我们的问题。

Hadoop 主要分为两大块: 分布式文件存储和分布式计算。

在分布式文件存储中,他会把文件分割为想多相同的小块。

MapReduce 简介的更多相关文章

  1. MapReduce简介

    MapReduce简介 参考自[http://www.cnblogs.com/swanspouse/p/5130136.html] MapReduce定义: MapReduce是一种可用于数据处理的编 ...

  2. 【MapReduce】一、MapReduce简介与实例

    (一)MapReduce介绍 1.MapReduce简介   MapReduce是Hadoop生态系统的一个重要组成部分,与分布式文件系统HDFS.分布式数据库HBase一起合称为传统Hadoop的三 ...

  3. 大数据技术 —— MapReduce 简介

    本文为senlie原创,转载请保留此地址:http://www.cnblogs.com/senlie/ 1.概要很多计算在概念上很直观,但由于输入数据很大,为了能在合理的时间内完成,这些计算必须分布在 ...

  4. MapReduce简介以及详细配置

    1.MapReduce(一个分布式运算框架)将数据分为数据块,发送到不同的节点,并行方式处理. 2.NodeManager和DataNode在一个节点上,程序与数据在一个节点. 3.内容分为两个部分 ...

  5. MapReduce的核心资料索引 [转]

    转自http://prinx.blog.163.com/blog/static/190115275201211128513868/和http://www.cnblogs.com/jie46583173 ...

  6. MapReduce原理与设计思想

    简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃? MapReduce方法则是: 给在座的所有玩家中分配这摞牌 让每个玩家 ...

  7. 化繁为简(三)—探索Mapreduce简要原理与实践

    目录-探索mapreduce 1.Mapreduce的模型简介与特性?Yarn的作用? 2.mapreduce的工作原理是怎样的? 3.配置Yarn与Mapreduce.演示Mapreduce例子程序 ...

  8. Hadoop(十二)MapReduce概述

    前言 前面以前把关于HDFS集群的所有知识给讲解完了,接下来给大家分享的是MapReduce这个Hadoop的并行计算框架. 一.背景 1)爆炸性增长的Web规模数据量 2)超大的计算量/计算复杂度 ...

  9. 典型分布式系统分析之MapReduce

    在 <分布式学习最佳实践:从分布式系统的特征开始(附思维导图)>一文中,提到学习分布式系统的一个好方法是思考分布式系统要解决的问题,有哪些衡量标准,为了解决这些问题:提出了哪些理论.协议. ...

随机推荐

  1. jQuery插件入门

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写("#"),("#"),("."),写了几年就对别人说非常熟悉JQ ...

  2. python爬虫beta版之抓取知乎单页面回答(low 逼版)

    闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品 ...

  3. Public DNS (公共域名解析服务)

    114DNS 服务IP:114.114.114.114, 114.114.115.115 拦截 钓鱼病毒木马网站:114.114.114.119, 114.114.115.119 拦截 色情网站:11 ...

  4. completionService

    我们现在在Java中使用多线程通常不会直接用Thread对象了,而是会用到java.util.concurrent包下的ExecutorService类来初始化一个线程池供我们使用. 当我们使用Exe ...

  5. Title Case a Sentence

    解决思路 将字符串转换成小写 把字符串分割成字符串数组 循环数组将每一个单词首字母大写 把数组所有的元素转换成一个字符串 第一种方法 function titleCase(str) { str=str ...

  6. C/C++语言,自学资源,滚动更新中……

    首先要说<一本通>是一个很好的学习C/C++语言的自学教材. 以下教学视频中,缺少对"字符串"技术的讨论,大家注意看书.         一维数组,及其举例:(第四版) ...

  7. MVC 上传 下载

    [上传]带进度条 view  注:添加easyui的js文件 <script type="text/javascript"> function fileSelected ...

  8. CLion 2016.2.2 注册激活码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  9. [功能改进]Live Writer发博支持“建分类、加标签、写摘要”

    以前您在园子里用Windows Live Wirter发布博文是不是有以下三个不爽: 不爽1:如果想在发布随笔时新建分类并将随笔添加至该分类,需要先在博客后台添加分类,然后在Live Writer中刷 ...

  10. 自动重启sqlserver服务

    公司一台官网服务器是由.net语言sqlserver数据库开发的,官网后台登录要涉及到sql数据库,现在出了一个问题,每天登录后台都会报错,要重启sqlserver才能进入,问题一直也没有解决,但是也 ...