首页 > 其他分享 >我眼中的大数据(三)——MapReduce

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

时间:2022-09-23 15:14:48浏览次数:43  
标签:Map Reduce MapReduce JobTracker TaskTracker 进程 眼中 数据

这次来聊聊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。

 

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作业的启动和运行机制,对理解大数据的核心原理,做到真正意义上把握大数据作用巨大。

标签:Map,Reduce,MapReduce,JobTracker,TaskTracker,进程,眼中,数据
From: https://www.cnblogs.com/hhhnicvscs/p/16722787.html

相关文章

  • 简化数据结构的初始化过程
    避免在每新建类时,都要重复实现构造器,因此可以定义一个公共基类,在基类中实现实例属性的初始化规则,此后在派生类中,只需要指定属性字段即可1classInit:2_fields=......
  • vue收集表单数据给后端交互
    vue项目中需要收集表单数据给后端发送请求进行交互:查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compa......
  • mybatis-plus使用selectPage查询数据时,total为0 的解决方案
    1:问题描述项目迁移,原本正常的mp的分页坏了,经过调试发现是total参数没有  2:原因这是mp需要设置分页拦截器才能生效的,所以只要注入一下拦截器即可3:解决把这段代码放......
  • 业务数据治理体系化思考与实践
    https://tech.meituan.com/2022/05/12/business-data-governance.html  ......
  • python之操作数据库删除创建
    importMySQLdb#创建一个数据库连接对象conn=MySQLdb.connect(host='localhost',port=3306,user='root',password='123456')#获取连接的游标......
  • 开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
    开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理......
  • MongoDB数据库备份(mongodump)以及恢复(mongorestore)工具实践
    摘要mongodump备份工具mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。mongodump的参数与mongoexport的参......
  • python数据透视表
    #%%importpandasaspdimportnumpyasnp#%%df=pd.read_csv('标普500财务数据项目.csv',sep=',')#%%df#%%atq=df.iloc[:,[0,1,2,4]]niq=df.iloc......
  • Oracle数据库备份恢复
    数据库备份热备份(expdp/impdp导出/导入)通过expdp数据泵工具把老服务器数据导出到一个*.dmp文件中,然后在新服务器上通过impdp导入命令把dmp文件中的数据泵入到数据......
  • 如何将CAD数据导入GIS软件,实现GIS+CAD空间规划一张图?
    “规划一张图管理系统”是为规划管理部门、规划设计部门研发的,管理各类规划编制成果、规划审批成果、规划监管成果以及基础地理信息数据的一张图系统。旨在建立符合国家、......