我眼中的大数据(三)——MapReduce[亲测有效]

我眼中的大数据(三)——MapReduce[亲测有效]​ 这次来聊聊Hadoop中使用广泛的分布式计算方案——MapReduce。MapReduce是一种编程模型,还是一个分布式计算框架。 MapReduce作为一种编程模型功能强大,使用简单。运算内容不

我眼中的大数据(三)——MapReduce

这次来聊聊Hadoop中使用广泛的分布式计算方案——MapReduce。MapReduce是一种编程模型,还是一个分布式计算框架

MapReduce作为一种编程模型功能强大,使用简单。运算内容不只是常见的数据运算,几乎大数据中常见的计算需求都可以通过它来实现。使用的时候仅仅需要通过实现Map和Reduce接口的方式来完成计算逻辑,其中Map的输入是一对<Key, Value>,经过计算后输出一对<Key, Value>;然后将相同Key合并,形成<Key, Value>集合;再将这个集合输入Reduce。

下面,就以WordCount为例,熟悉一下MapReduce:

WordCount是为了统计文本中不用词汇出现的次数。如果统计一篇文本的内容,只需要写一个程序将文本数据读入内存,创建一个字典,记录每个词出现的次数就可以了。但是如果想统计互联网中网页的词汇数量,就需要用MapReduce来解决。

public class WordCount {

  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

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

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }
}

从上面代码不难发现,MapReduce核心是一个map函数和一个reduce函数。map函数的输入主要是一个<Key, Value>对,在这个例子里,Value是要统计的所有文本中的一行数据,Key在一般计算中都不会用到。map函数将文本中的单词提取出来,针对每个单词输出一个<word, 1>。MapReduce计算框架会将这些<word , 1>,合并成<word , <1,1,1,1,1,1,1…>>,然后传给reduce函数。reduce函数将这个集合里的1求和,再将word和这个sum组成一个<Key, Value>,也就是<word, sum>输出。apReduce框架为每个数据块分配一个map函数去计算,从而实现大数据的分布式计算。

MapReduce在运行过程中有三个关键进程,分别是Driver进程、JobTracker进程、TaskTracker进程。

1.Driver进程:是启动MapReduce的主入口,主要是实现Map和Reduce类、输入输出文件路径等,并提交作业给Hadoop集群,也就是下面的JobTracker进程。

2.JobTracker进程:根据输入数据数量,命令TaskTracker进程启动相应数量的Map和Reduce进程,并管理整个生命周期的任务调度和监控。

3.TaskTracker进程:负责启动和管理Map以及Reduce进程。因为需要每个数据块都有对应的map函数,TaskTracker进程通常和HDFS的DataNode进程启动在同一个服务器。

JobTracker进程和TaskTracker进程是主从关系,同一时间提供服务的主服务器通常只有一台,从服务器有多台,所有的从服务器听从主服务器的控制和调度安排。主服务器负责为应用程序分配服务器资源以及作业执行的调度,而具体的计算操作则在从服务器上完成。MapReduce的主服务器就是JobTracker,从服务器就是TaskTracker。

我眼中的大数据(三)——MapReduce[亲测有效]

 

1.JobClient将包含MapReduce的JAR包存储在HDFS中,将来这些JAR包会分发给Hadoop集群中的服务器执行计算。

2.向JobTracker提交Job。

3.JobTracker根据调度策略创建JobInProcess树,每个作业都会有一个自己的JobInProcess树。

4.JobInProcess根据输入数据的块数和配置中的Reduce数目创建相应数量的TaskInProcess。

5.TaskTracker和JobTracker进行心跳通信。

6.如果TaskTracker有空闲的计算资源,JobTracker就会给它分配任务。

7.TaskTracker收到任务类型(是Map还是Reduce)和任务参数(JAR包路径、输入数据文件路径),启动相应的进程。

8.Map或者Reduce进程启动后,检查本地是否有要执行任务的JAR包文件,如果没有,就去HDFS上下载,然后加载Map或者Reduce代码开始执行。

9.如果是Map进程,从HDFS读取数据;如果是Reduce进程,将结果写出到HDFS。

我们仅仅是编写一个map函数和一个reduce函数就可以了,不用关心这两个函数是如何被分布启动到集群上的,也不用关心数据块又是如何分配给计算任务的。

MapReduce框架要将一个相对简单的程序,在分布式的大规模服务器集群上并行执行起来却并不简单。理解MapReduce作业的启动和运行机制,对理解大数据的核心原理,做到真正意义上把握大数据作用巨大。

原文地址:https://www.cnblogs.com/hhhnicvscs/archive/2022/09/23/16722787.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4734.html

(0)
上一篇 2023-06-07
下一篇 2023-06-07

相关推荐

  • Oracle学习(五) — 视图、序列、同义词、索引「建议收藏」

    Oracle学习(五) — 视图、序列、同义词、索引「建议收藏」1、视图 1.1、什么是视图 视图就是一个虚拟表,实体表的映射。 什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(表结构简化) 在项目过程中,程序员主要关…

    2023-03-07
    139
  • couchbase couchdb_hbase scan

    couchbase couchdb_hbase scan作为MongDB最有力的竞争对手,为什么市场占用率那么低,看完社区版阉割掉的以下功能你就明白了。 查询服务 无限并发查询: 基于成本的优化查询: 查询时通常会考虑CPU、内存、网络传输和硬盘使用率等…

    2023-03-20
    177
  • Mysql 中 DDL、DML、DQL、DCL、TCL「终于解决」

    Mysql 中 DDL、DML、DQL、DCL、TCL「终于解决」1. DDL(Data Definition Languages)语句:即数据库定义语句 用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE、 ALTER、 DR…

    2023-04-01
    151
  • Mysql工作日志「终于解决」

    Mysql工作日志「终于解决」1. DISTINCT效率极差,可以选择替换groupby,最好能在代码内部去重 2. filesort效率也很低 3. 能使用连接查询尽量不要使用子查询 4. in查询包含内容很多的情况下,不要通…

    2023-03-22
    145
  • 更高效的时间管理:Python的On-Time-In-Time策略

    更高效的时间管理:Python的On-Time-In-Time策略现代生活节奏快,时间管理显得愈加重要。合理地规划时间可以使我们更好地完成工作任务,提高工作效率,减少工作压力。On-Time-In-Time (OTIT)是一种帮助我们提高时间管理效率的策略。Python作为一种高效的编程语言,可以帮助我们实现这一策略。

    2024-03-19
    82
  • 基本的python(基本的python内置函数有哪些)

    基本的python(基本的python内置函数有哪些)python作为当下最热门的计算机编程语言之一,是许多互联网大厂(如阿里腾讯等)在招聘时会作出要求的能力之一。学好python对于将来大数据方向、云计算方向等物联网时代新兴岗位的学习很有帮助。

    2023-11-19
    126
  • 利用Python Tuple进行数学计算

    利用Python Tuple进行数学计算a href=”https://www.python100.com/a/sm.html”font color=”red”免责声明/font/a a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-01-10
    98
  • 【爱可生公开课】如何应对让大家头疼的MySQL hash sharding扩容?

    【爱可生公开课】如何应对让大家头疼的MySQL hash sharding扩容?大家久等啦! 爱可生第二期线上公开课要来咯!这次我们要和大家分享的是让人光是听到就“虎躯一震”的MySQL hash sharding 扩容!!! 爱可生将于6 月 2 日正式开播!【爱可生公开课】…

    2023-03-05
    146

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注