Hadoop MapReduce
- 理解mapreduce思想
- 核心:分而治之 先分再合
- 两个阶段
- map阶段(分):如果任何可以拆分并且没有依赖 那么就把复杂的任务拆分成小任务
拆分成小任务之后 可以并行计算 提高处理效率 - reduce阶段(合):把map阶段的各个局部结果进行汇总 得到最终的结果
- 来源:来源于生活 包括Google和hadoop团队在内 都是把这种思想提炼处理 应用于大数据处理
- Hadoop MapReduce设计构思
- 如何面对大数据的处理场景:分而治之
如果大数据没有依赖可以拆分 那么就把大的数据拆分若干个小的数据 以并行计算提高处理效率 - 函数式编程的模型
- map 分的阶段数据处理
- reduce 合的阶段数据处理
在mapreduce中,数据都是以**<key,value> 键值对**形式存在.
- 隐藏系统底层细节 把做什么 和怎么做进行拆分
- 做什么:业务问题 ---->用户负责 10%
- 怎么做:技术问题----->mr框架 90%
必须用户的代码根据其编程规范合起来才能构成mr程序。
- mapreduce的编程规范和结构
- 从代码层面看
类1---->继承Mapper 该类负责mr中map阶段的业务逻辑处理
类2---->继承Reducer 该类负责mr中Reduce阶段的业务逻辑处理
类3 (客户端类 main) 该类是mr程序的运行的客户端 用于各种组件参数的拼接提交mr程序
把上述3个类打成一个jar包 就是mr程序
- 从执行层面看
maptask map阶段运行的task 负责处理map阶段的业务逻辑---->类1
reducetask reduce阶段运行的task 负责处理reduce阶段的业务逻辑---->类2
MrAppMaster 程序运行的老大 负责mr程序内部的调度监督执行
- 案例:wordcount
- 需求:统计指定文件中每个单词的总次数
hadoop hive allen
itcast hadoop
hadoop
- mr实现思路
- map
把数据变成一个个的键值对输出 <单词,1><单词,1><单词,1><单词,1><单词,1>
- reduce
把kv中k相同的v加起来就是单词的总次数 <单词总次数>
- 开发环境的搭建
- jar版本的选择
- 理论上个应该开发的版本和服务器搭建的版本一致 hadoop2.6.0–cdh-5.14.0
- 推荐使用apache 2.7.4版本
- 优点:
- 两个版本的api 逻辑一样
- 官方版本中 源码注释清晰 便于解读源码
- hadoop从2.6 到2.7的过程 中 本地执行环境做了调整 2.6.0不利于本地开发调试
- 注意:如果使用cdh版本 需要在pom文件中 手动添加cloudera的maven仓库地址
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
- hadoop数据类型
为了提高网络传递数据的高效性 hadoop自己封装了一套数据类型 实现了自己的序列化机制
hadoop序列化机制是一个接口 Writable
* long----->longWritable
* String--->Text
* int------>intWritable
* Double--->DoubleWritable
* null----->nullWritable
- mapreduce的运行模式
- 概念:所谓的运行模式指的是由谁给mr程序提供运算时候所需要的硬件资源
- 两种模式:
- 集群模式:程序计算的资源由yarn分配 分布式计算的效果 生产环境线上环境的模型
- 本地模式:程序计算的资源由程序所在的机器本地系统模拟出 单机计算的效果 开发测试环境
- 决定什么模式运行
mapreduce.framework.name = local 本地模式
mapreduce.framework.name = yarn 集群模式
如果不配置 默认是local模式 但是要注意该集群的环境中是否配置了hadoop 如果有覆盖默认的
识别出mared-site.xml中配置
- 注意事项
要想本地运行mr程序 需要解决hadoop native library问题 winutils.exe 程序
- mapreduce执行注意事项
- 输出路径问题
FileAlreadyExistsException: Output directory file:/D:/wordcount/output already exists
如果输出路径已经存在 mr执行报错
- 输入路径问题
如果输入路径指向的是一个文件 mr程序就处理该文件
如果输入路径指向的是一个文件夹(目录),mr程序就处理该目录下所有的文件 - 识别mr程序运行模式的技巧
程序执行ID编号
yarn: job_1563690819511_0001
local: job_local333614689_0001