IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 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); 
      
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:59:21  更:2021-07-17 12:01:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 2:45:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码