MapReduce
概述
-
-
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
-
MapRedcue优点:
-
海量数据(PB级)离线处理&易开发&易运行&高容错性
-
-
MapReduce缺点:
-
实时流式计算做不到
-
不擅长DAG(有向图)计算:多个应用程序存在依赖关系,后一个程序的输入为前一个的输出。在这种情况下,MapReduce并不是不能做,而是使用后,每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。
-
MapReduce进程
-
一个完整的MapReduce程序在分布式运行时有三个类实列进程:
-
MrAppMaster:负责整个程序的过程调度及状态协调。
-
Map Task:负责Map阶段的整个数据处理流程。
-
Reduce Task:负责Reduce阶段的整个数据处理流程。
-
常用数据序列化类型
-
常用数据类型对应的Hadoop数据序列化类型
Java类型 Hadoop Writable类型 boolean BooleanWritable byte ByteWritable int IntWritable float FloatWritable long LongWritable double DoubleWritable String Text map MapWritable array ArrayWritable
MapReduce编程规范
-
用户编写程序分成三个部分:Mapper、Reduce和Driver
-
Mapper阶段
-
用户自定义的Mapper要继承自己的父类
-
Mapper的输入数据是KV对的形式(KV的类型可自定义)
-
Mapper中的业务逻辑写在map()方法中
-
Mapper的输出数据是KV对的形式(KV的类型可自定义)
-
map()方法(MapTask进程)对每个<K,V>调用一次
-
-
Reduce阶段
-
用户自定义的Reduce要继承自己的父类
-
Reduce的输入数据类型对应Mapper的输出数据类型,也是KV
-
Reduce中的业务逻辑写在Reduce()方法中
-
Reduce()方法对每一组相同K的<K,V>组调用一次Reduce()方法
-
-
Driver阶段
-
相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的job对象
-