MapReudce--初探

1、功能

MapReudce的发展

  • Hadoop1:分布式并行计算框架,类似于YARN+Mapreduce
  • Hadoop2:分布式编程模型分布式计算由YARN来实现
  • MapReduce的 主要功能:实现分布式程序的开发提供了一套完整的分布式程序的API框架
  • 大数据存储:必须将一个大的文件,拆分成多个小的块,交个多台机器并行存储,提供并行的读写
  • 大数据计算:必须将一个大的任务,拆分成多个小的任务,交个多台机器并行运行,提供并行的计算

怎么提高性能效率的?

用多台机器一起处理来代替一台机器处理

问题:大数据就是开发一些数据处理的程序来实现对数据的计算,程序必须为可以分布式在多台机器上并行运行计算的程序,怎么实现?

  • 自己开发实现:多线程并发运行
    • 复杂度和成本非常高
  • 利用封装好的分布式的API来开发
    • 将需求的逻辑代码填空填到这个框架,这个框架会自动帮你实现分布式
    • 只要给定数据处理的逻辑

举例:1加到9

  • 只要给定逻辑:1,2,3,4,5,6,7,8,9,每个数字相加
    • 处理的数据是什么?
    • 实现的逻辑是什么?
    • 结果保存的地方在哪里?
  • MapReduce:自动将这个逻辑进行拆分和计算【YARN】以及合并的逻辑
    • task1:1+2+3 = 6
    • task2:4+5+6 = 15
    • task3: 7+8+9 = 24
    • task4 : 6+15+24 = 45

2、设计模型

  • 设计思想:分而治之的思想
    • 1+2+3+4+5+6+7+8+9
  • 分:将大的任务逻辑,拆分成多个小的任务逻辑
    • 1+2+3
    • 4+5+6
    • 7+8+9
  • 合:将每个小任务的结果再根据对应的任务逻辑进行何必并
    • 6+15+24 = 45

3、阶段or分类

不完整划分:三个阶段

  • 只有三大阶段的程序:Input、Map、Output
  • 没有Shuffle和Reduce
  • job.setNumReduceTasks(0);//设置Reduce个数为0.不论有没有reduce的类,都不会执行
  • 类似于SQL:select 1 from 2 where 3 limit 7
  • 结果文件part-m-00000

应用场景

  • 不需要聚合,只做一对一的处理或者过滤之类的
  • 1000行数据,将脏数据过滤,保留合法的数据,不需要聚合

完整划分:五大阶段

  • 完整的五大阶段的程序:Input、Map、Shuffle、Reduce、Output
  • 如果你需要分组、排序、聚合,就需要shuffle和reduce
  • 类似于SQL语法:select 1 from 2 where 3 group by 4 having 5 order by 6 limit 7

Input:

负责整个程序的输入,我们要处理的数据在什么地方

  • MapReduce程序默认就会读取HDFS上的文件,作为程序的输入
  • MapReduce的API中:InputFormat
    • 这个类默认使用的TextInputFormat:默认从HDFS上读取数据
    • 其他举例:DBInputFormat:可以从数据库中读取数据

Map:

分,将任务在逻辑上划分多个小的任务,每个小的任务会对应一个MapTask

  • 负责处理Input传递过来的数据
  • 每个MapTask处理一部分数据
  • 假设:
    • Input:256M数据
    • Map:2个MapTask,每个MapTask处理128M数据
  • 处理的逻辑:由开发者自定义,重写一个map方法
public  void map(Input阶段的数据){
        
//这个方法中定义你的对Input阶段传进来的数据怎么进行处理}

每个MapTask会对自己的每一条数据调用这个方法来处理

Shuffle:

MapReduce自带的一个功能可以干预但是不能避免

  • 会自动对Map输出的数据进行处理
  • 处理的逻辑:分组、排序
  • 处理逻辑类似于SQL,当初设计的时候就是参考SQL逻辑的
select 1 from 2 where 3 group by 4 having 5 order by 6 limit 7

在这里插入图片描述

Reduce:

合,将shuffle处理的结果,进行聚合,默认会启动一个ReduceTask将上一步所有的数据再次进行处理

  • 合并逻辑:由开发者自定义
  • 提供了一个方法:重写reduce方法
public  void reduce(SHuffle的输出){
        //定义聚合的逻辑
}

Output:

负责整个程序的输出,将处理以后得到的结果进行保存

  • MapReduce程序默认会将结果写入HDFS,保存为文件
  • MapReduce的API中:OutputFormat
    • 这个类默认使用TextOutputFormat:默认将结果写入HDFS
    • 其他举例:DBOutputFormat:可以将结果写入数据库

三个过程

  • 输入:Input:处理的数据是什么
  • 处理:数据怎么处理
    • Map:拆分:处理的逻辑由用户自定义,重写map方法
    • Shuffle:处理逻辑:分组和排序
    • Reduce:合并:处理的逻辑由用户自定义,重写reduce方法
  • 输出:Output:结果保存在什么地方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值