Hadoop——day2
分类:
文章
•
2024-01-07 11:44:04
- MapReduce
- 核心思想
- 分治
- 先分再合
- map负责分,即将复杂任务拆分为可并行计算且几乎没有依赖关系的小任务
- reduce负责合,即对map阶段的结果进行汇总
- 模拟MapReduce计算
- 需求:统计文件中每个单词出现的总次数
- 不采用mr的传统处理方式
- 1.建立java项目,引入hdfs的jar包,通过fs.copyToLocalFile()
- 2.读取文件,切割单词,统计次数
- 采用MapReduce思想
- 先分:把这批数据分成若干个部分,不遗漏,不重复
- 再合:讲每部分数据的结果进行汇总
- 设计构思
- 核心功能:将用户代码和自带组件整合成完整分布式运算程序,并发运行在集群上
- 处理数据类型:键值对
- 使用者仅考虑需要做什么及各个阶段的数据类型
- 输入与输出
- mapper过程
- 阶段1:将输入目录下文件按照标准逐个进行逻辑(虚拟)切片,形成切片规划。一个切片对应一个MapTask
- 阶段2:将切片数据按规则解析成键值对,默认规则是将一行文本内容解析成键值对。key是行起始位置,value是行文本内容
- 阶段3:对每一个键值对调用一次map方法,并输出零或多个键值对
- 阶段4:对键值对进行分区,默认只有一个区,每个区对应一个reducer
- 阶段5:对分区中键值对进行排序(按先键后值的顺序)
- 阶段6:combiner进行局部聚合,键相等的键值对会调用一次reduce。默认没有此阶段
- Reducer过程
- reducetask把属于自己分区的数据进行合并和排序
- 把所有数据按字典序排序,相同的作为一组调用reduce
- k:是每组相同的key,v:所有v组成的迭代器
- 并行度机制
- map阶段并行度由客户端提交job时决定
- 解决数据倾斜
- shuffle机制
- MapReduce关键:将map阶段处理的数据传递给reduce阶段
- 优化参数
- 计数器(counter)
- 提供观察MapReduce job运行期间的各种细节数据的窗口
- 多job串联