1 MapReduce概述
1.1 定义
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。
MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
1.2 特点
优点:
缺点:
- 不擅长实时计算(MySQL)
- 不擅长流式计算:输入数据集是静态的,不能动态变化
- 不擅长DAG(有向无环图)计算,MR结果输出到 磁盘,造成大量磁盘IO,性能低下
1.3 核心思想
-
分布式的运算程序至少两个阶段
-
MapTask并发实例,完全并行运行,互不相干
-
ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出
-
MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段
-
可以多个MapReduce程序,串行运行,解决复杂的业务逻辑
1.4 进程
- MrAppMaster:负责整个程序(任务/job/mr)的过程调度及状态协调,是yarn中的APPMaster的子进程
- MapTask(yarnchild,yarn的子进程)
- ReduceTask(yarnchild,yarn的子进程)
1.5 MapReduce编程规范
-
Mapper阶段
1)继承Mapper类
2)输入数据默认是KV对:key偏移量,value:一行的内容
3)将业务逻辑写在map()中
4)map()方法对每一个<k,v>(每行)调用一次
-
Reducer阶段
1)继承Reducer类
2)输入数据类型即Mapper的输出数据类型
3)业务逻辑写在reduce()中
4)对每一组相同k的<k,v的集合>调用一次reduce()
-
Driver阶段
YARN集群的客户端,提交整个程序到YARN集群,提交的是封装了MR程序相关运行参数的Job对象
1.6 测试
流程:windows环境下搭建hadoop环境–>编写代码–>本地测试–>打包上传–>执行命令,多jar包,使用任务调度器阿兹卡班,使用脚本执行命令,
2 Hadoop序列化
2.1 概念
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象。
2.2 意义
-
为什么要序列化?
序列化可以实现在传输数据时,保留数据的值和数据类型
对象只生存在内存中,且由本地进程使用,序列