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. [转]基于Starling移动项目开发准备工作

    最近自己趁业余时间做的flash小游戏已经开发得差不多了,准备再完善下ui及数值后,投放到国外flash游戏站.期间也萌生想法,想把游戏拓展到手机平台.这两天尝试了下,除去要接入ane接口的工作,小游 ...

  2. mysql cpu和内存监控

    mysqlMem 监控:#!/bin/bashPid=`/bin/ps -ef|grep mysqld|grep -Ev "grep|safe"|awk '{print $2}'` ...

  3. char和byte的区别

    char的字符数据类型,是无符号型的,占2个字节:大小范围是0-65535: byte是字节数据类型,是有符号型的,占1个字节:大小范围为-128-127: 1, char c1=3; char c= ...

  4. vi 技巧和诀窍~转IBM

    复合搜索 1 #!/bin/ksh 2 # 3 echo "Starting" 4 file=${1} 5 6 echo ${file} 7 8 if [[ ${file} = 1 ...

  5. 解决Win10图片打开方式没有“Windows照片查看器”问题

    1.打开注册表编辑器(Win+R,Regedit),定位至(建议修改前备份注册表): HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewe ...

  6. 阿里云服务器Linux CentOS安装配置(四)yum安装tomcat

    阿里云服务器Linux CentOS安装配置(四)yum安装tomcat 1.yum -y install tomcat  执行命令后,会帮你把jdk也安装好 2.tomcat安装目录:/var/li ...

  7. TiD大会学习心得之沟通交流

    沟通交流是敏捷成功的关键要素,据相关调查阻碍敏捷的主要原因都与人有关:例如缺乏领导支持.团队缺乏协作精神.公司文化与敏捷相冲突等等:同时沟通交流也是团队建设.教练自身成长的重要支柱.下面结合在< ...

  8. C#多线程环境下调用 HttpWebRequest 并发连接限制

    C#多线程环境下调用 HttpWebRequest 并发连接限制 .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 win ...

  9. SQL2014 error 40 ( Microsoft SQL Server, 错误2)

    可能是安装了SQL EXPRESS版 尝试使用(local)\SQLEXPRESS 作为服务器名称登陆. 用 计算机名\实例名  作为用户名登录.

  10. JMeter学习-029-JMeter配置文件propertie配置项读取及应用实例

    在上文中提到通过读取配置文件中的数据,以此定制JMeter Slave的脚本分发路径(默认脚本路径,即参数文件相对路径父目录). 此文,就以此为例进行实例说明. 通过阅读JMeter源码 core/s ...