软件开发教程 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试
游戏开发 网络协议 系统运维 HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程
C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
 
   -> 大数据 -> MapReduce编写程序流程 -> 正文阅读

[大数据]MapReduce编写程序流程

MapReduce的概述

MapReduce

MapReduce是一个分布式运算程序的编程框架,MapReduce的核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。

MapReduce的优点

优点:

  1. MapReduce易于编程,可以简单的实现一些接口,就可以完成一个分布式程序
  2. 良好的扩展性,可以通过简单的增加机器来扩展它的计算能力
  3. 高容错性,其中一台机器挂掉,也可以把上面据算任务转移到其他的节点进行工作
  4. 适合大数据量得离线处理

缺点

  1. 不擅长实时计算,无法像mysql一样,快速的响应返回结果
  2. 不擅长流式数据的计算,因为MapReduce输入的数据都是静态的
  3. 不擅长DAG-有向无环图的计算

MapReduce的工作流程

  1. MapReduce的工作流程分为两个部分:Map阶段和Reduce阶段
  2. Map阶段的并发MapTask,完全并发运行,互不相干
  3. Reduce阶段的并发Reduce Task,完全互不相干,但是他们的数据依赖于Map将诶段输出的数据
  4. MapReduce编程模型只包括一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,就只能有多个MapReduce程序,串行运行若干问题细节

MapReduce各组成间的相互配合

一个完整的MapReduce程序在分布式运行时候有三类实例进程

  1. MrAppMaster:负责整个程序的过程调度及状态协调
  2. Map Task :负责Map阶段的整个过程处理流程
  3. Reduce Task:负责Reduce阶段的整个数据处理流程

MapReduce的编程规范

  1. Map阶段

    • 用户自定义的Map类需要继承父类Mapper
    • 确定Map阶段的输入和输出类型,Map阶段的输入和输出类型都是以键值对<k,v>呈现
    • 重写map()方法,将Map阶段的逻辑重写在map()方法中
    • map()方法中的逻辑(Map Task)对每一个<k,v>调用一次
  2. Reduce阶段

    • 用户自定义的Reducer类需呀继承父类Reducer
    • Reducer阶段的输入类型就是Mapper阶段的输出类型
    • 重写reduce()方法,将Reducer的逻辑卸载reduce()方法内
    • Reduce Tasl进程对每一组相同k的<k,v>调用一次reduce()方法
  3. Driver阶段

    相当于Yarn集群的客户端,用于提交整个程序到Yarn集群,提高的是封装了MapReduce程序相关运行参数的job对象

    Driver阶段的编写具有程序化的代码,主要分为以下几点

    1. 获取job对象

      Configuration conf = new Configuration(); 
      Job job = Job.getInstance(conf); 
      
    2. 关联本Driver类

      ob.setJarByClass(FlowDriver.class); 
      
    3. 关联Map和Reduce类

      job.setMapperClass(UserMapper.class); 
      job.setReducerClass(UserReducer.class); 
      
    4. 设置Map的输入输出类型

      job.setMapOutputKeyClass(Text.class); 
      job.setMapOutputValueClass(FlowBean.class); 
      
    5. 设置最终的输入输出类型

      job.setOutputKeyClass(Text.class); 
      job.setOutputValueClass(FlowBean.class); 
      
    6. 设置输入输出路径

      FileInputFormat.setInputPaths(job, new Path("输入路径")); 
      FileOutputFormat.setOutputPath(job, new Path("输出路径")); 
      
    7. 提交job

      boolean b = job.waitForCompletion(true); 
      System.exit(b ? 0 : 1); 
      
  大数据 最新文章
Zookeeper做配置中心
kafka安装和学习使用
spring-kafka消费者源码分析
实现flink自定义幂等写入ClickHouse,并封装
Flink CDC 2.0 设计方案
hadoop如何关闭namenode和datanode
Kafka基本命令
Flink on Zeppelin 流计算处理最佳实践
(尚硅谷)springData 集成 Elasticsearch
大数据hadoop hdfs 读写流程
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:59:21  更:2021-07-17 12:01:31 
 
360图书馆 购物 三丰科技 阅读网 日历 万年历 2021年7日历 -2021/7/27 5:22:36-
图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件开发教程