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
-
-
-