主从结构

  主节点:JobTracker(一个)

  从节点:TaskTrackers(多个)

JobTracker:

  接收客户提交的计算任务

  把计算任务分配给TaskTrackers执行

  监控TaskTracker执行情况

TaskTrackers:

  执行JobTracker分配的计算任务


MapReduce计算模型

  在Hadoop中,每个MapReduce任务都被初始化为一个Job,每个Job分为两个阶段:Map、Reduce。这两个阶段分别用两个函数表示 :Map、Reduce

  Map函数接收一个<key,value>形式的输入,产生同样形式的中间输出。Hadoop将所有相同key的value集合到一起传递给Reduce函数

  Reduce函数接收一个<key,(list of value)>形式的的呼入,然后对value集合进行处理输出结果。Reduce的输出也是<key,value>的形式

练习:

输入文本

  1. 姓名 分数

多个文本,内容行如上述,统计每个人的平均分

Map

  1. package org.zln.scorecount;
  2.  
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.LongWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Mapper;
  7.  
  8. import java.io.IOException;
  9. import java.util.StringTokenizer;
  10.  
  11. /**
  12. * Created by sherry on 15-7-12.
  13. */
  14. public class ScoreMap extends Mapper<LongWritable,Text,Text,IntWritable> {
  15.  
  16. @Override
  17. protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  18. String line = value.toString();//将纯文本的数据转化为string
  19. StringTokenizer tokenizer = new StringTokenizer(line,"\n");//切割
  20. while (tokenizer.hasMoreTokens()){
  21. StringTokenizer tokenizerLine = new StringTokenizer(tokenizer.nextToken());
  22. String strName = tokenizerLine.nextToken();//姓名
  23. String strScore = tokenizerLine.nextToken();//成绩
  24.  
  25. Text name = new Text(strName);
  26. int scoreInt = Integer.parseInt(strScore);
  27. context.write(name,new IntWritable(scoreInt));//输出姓名:成绩
  28.  
  29. }
  30. }
  31. }

Reduce

  1. package org.zln.scorecount;
  2.  
  3. import org.apache.hadoop.io.IntWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Reducer;
  6.  
  7. import java.io.IOException;
  8. import java.util.Iterator;
  9.  
  10. /**
  11. * Created by sherry on 15-7-12.
  12. */
  13. public class ScoreReduce extends Reducer<Text,IntWritable,Text,IntWritable> {
  14. @Override
  15. protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  16. int sum = 0;
  17. int count = 0;
  18. Iterator<IntWritable> intWritableIterator = values.iterator();
  19. while (intWritableIterator.hasNext()){
  20. sum += intWritableIterator.next().get();//总分
  21. count++;//平均分
  22. }
  23. int avg = sum/count;
  24. context.write(key,new IntWritable(avg));
  25. }
  26. }

Main

  1. package org.zln.scorecount;
  2.  
  3. import org.apache.hadoop.conf.Configured;
  4. import org.apache.hadoop.fs.Path;
  5. import org.apache.hadoop.io.IntWritable;
  6. import org.apache.hadoop.io.Text;
  7. import org.apache.hadoop.mapreduce.Job;
  8. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  9. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
  10. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  11. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
  12. import org.apache.hadoop.util.Tool;
  13. import org.apache.hadoop.util.ToolRunner;
  14.  
  15. /**
  16. * Created by sherry on 15-7-12.
  17. */
  18. public class ScoreMain extends Configured implements Tool{
  19. public int run(String[] args) throws Exception {
  20. Job job = new Job(getConf());
  21. job.setJarByClass(ScoreMain.class);
  22. job.setJobName("ScoreCount");
  23.  
  24. job.setOutputKeyClass(Text.class);
  25. job.setOutputValueClass(IntWritable.class);
  26.  
  27. job.setMapperClass(ScoreMap.class);
  28. job.setReducerClass(ScoreReduce.class);
  29.  
  30. job.setInputFormatClass(TextInputFormat.class);
  31. job.setOutputFormatClass(TextOutputFormat.class);
  32.  
  33. FileInputFormat.setInputPaths(job, new Path(args[0]));
  34. FileOutputFormat.setOutputPath(job, new Path(args[1]));
  35.  
  36. boolean success = job.waitForCompletion(true);
  37. return success?0:1;
  38. }
  39.  
  40. //统计平均分
  41. public static void main(String[] args) throws Exception {
  42. int ret = ToolRunner.run(new ScoreMain(), args);
  43. System.exit(ret);
  44. }
  45. }


我们的Map与Reduce都继承了父类,并复写了map或reduce方法

父类中 还有 三个方法未作处理

setup:启动map/reduce后首先调用

cleanup:最后调用

run:每次调用的时候都会执行

MapReduce架构的更多相关文章

  1. HBase、HDFS和MapReduce架构异同简解

    HBase.HDFS和MapReduce架构异同 .. HBase(公司架构模型) HDFS2.0(公司架构模型) MR2.0(公司架构模型) MR1.0(公司架构模型) 中央 HMaster Nam ...

  2. MapReduce架构与执行流程

    一.MapReduce是用于解决什么问题的? 每一种技术的出现都是用来解决实际问题的,否则必将是昙花一现,那么MapReduce是用来解决什么实际的业务呢? 首先来看一下MapReduce官方定义: ...

  3. 2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

    这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出 ...

  4. MapReduce架构与生命周期

    MapReduce架构与生命周期 概述:MapReduce是hadoop的核心组件之一,可以通过MapReduce很容易在hadoop平台上进行分布式的计算编程.本文组织结果如下:首先对MapRedu ...

  5. MapReduce架构设计

    MapReduce采用Master/Slave的架构,其架构图如下: 它主要有以下4个部分组成: 1)Client 2)JobTracker JobTracke负责资源监控和作业调度.JobTrack ...

  6. 第二代map-reduce架构YARN解析

    需求 我们在考虑hadoop map-reduce框架的时候,最重要需包括: 1. reliability 可靠性,主要是jobtracker,resource manager可靠性 2. avail ...

  7. MapReduce架构和算法(2)

    一个.combiner计划 每map它可能会产生大量的输出,combiner的作用是map输出端先做合并.reducer的数据量. combiner最基本是实现本地key的归并,combiner具有类 ...

  8. 【转】五分钟读懂大数据核心MapReduce架构及原理

    什么是MapReduce Hadoop中的MapReduce是一个简单的软件框架,基于它写出的应用程序可以运行在由上千个商用机器组成的大型集群上,并以一种可靠容错式并行处理TB级数据 MapReduc ...

  9. 初步掌握MapReduce的架构及原理

    目录 1.MapReduce定义 2.MapReduce来源 3.MapReduce特点 4.MapReduce实例 5.MapReduce编程模型 6.MapReduce 内部逻辑 7.MapRed ...

随机推荐

  1. LeetCode700. Search in a Binary Search Tree

    题目 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 例如, 给定二叉搜索树: 4 / \ 2 ...

  2. 用Java读取xml文件内容

     在AXP中,DOM解析器是1 Document Builder类的一个实例,该实例由 DocumenBailderfactorv类负责创,步如下  DocumentBuilderFactory fa ...

  3. Servlet学习笔记05——什么是jsp?

    1. jsp (java server page) (1)jsp是什么? sun公司制订的一种服务器端动态页面技术规范. 注: 因为虽然使用servlet也可以生成动态页面, 但是过于繁琐(需要使用o ...

  4. Windows Server 2012 搭建DHCP及远程路由访问

    1.1    基础环境信息 1.2    DHCP与远程访问服务器角色安装 1.服务器管理器—>仪表板—>添加角色和功能,出现添加角色和功能向导,点击下一步 2.选择安装类型为基于角色或基 ...

  5. ES6笔记03-Set和Map数据结构

    ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值.Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, 3, 5, 4, ...

  6. ajax原生js及readystate/status

    菜鸟教程 ←← GET: <script> function  ajaxGet(){ var  xmlhttp; if(window.XMLHttpRequest){ //TE7+  Fi ...

  7. (转)Clang 比 GCC 编译器好在哪里?

    编译速度更快.编译产出更小.出错提示更友好.尤其是在比较极端的情况下.两年多前曾经写过一个Scheme解释器,词法分析和语法解析部分大约2000行,用的是Boost.Spirit--一个重度依赖C++ ...

  8. linux学习(1)——这是一个新的开始,加油吧少年

     (一)自己简单总结 学会使用简单命令 Tab:实现自动补全功能 Ctrl+D:退出当前终端 Ctrl+Z:暂停当前进程 Ctrl+L:清屏 Ctrl+A:可以让光标移动到最前列 Ctrl+E:可以让 ...

  9. Python入门必知的几个点

    Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.全世界差不多有600多种编程语言,但流行的编程语言也就那么20来种.如果你听说过TIOB ...

  10. 裸机——210SD卡启动

    1.通过阅读iROM_Application_note可以获取关于启动的全部信息 2.记录下代码 制作SD卡启动的代码,即添加校验和的 #include <strings.h> #incl ...