1、Hadoop MapReduce a.包含的思想: 先分再合 分而治之 第一步:map分
前提:可以拆分 拆分没有依赖
把大的数据大的任务、复杂的任务拆分成若干个小任务。 拆分的目的:期许能够【并行】处理各个小部分 加快处理的效率。
第二步:reduce合 把map阶段各个局部的小结果汇总最终的结果。 b.hadoop团队针对MR设计构思 这个mr是用来处理大数据场景。 借鉴了函数式编程思想 分的阶段 封装了map函数 合的阶段 封装了reduce函数 注意:不管什么阶段 数据在mr程序中都是以kv键值对形式存在的 统一封装了底层的细节 框架负责技术实现 用户负责业务实现 业务实现不局限于编程语言 可以使用java python c++ php c.mapreduce进程和编程规范 mr作为分布式程序,运行期间分为3类进程。 MrAppmaster mr程序内部的老大 负责资源申请 执行的监督 MapTask map阶段运行的任务 ReduceTask reduce阶段运行的任务 一个mr程序只能包含一个map阶段和一个reduce阶段。 如果业务复杂 只能通过多个mr串行依次执行。 在整个mr程序中,用户负责的业务,其他框架默认实现了很多技术。 包括读数据组件、写数据组件、内部排序、内部分组 d.mapreduce编程 现状:企业中已经没有直接使用mr编程处理数据的了 原因:编程不高效 复杂逻辑处理起来麻烦 离线阶段:sql on hadoop----->数仓 Hive hive sql----->mapreduce----->hdfs数据 示例1:计算圆周率 目的:学会如何提交一个mr程序。 命令:hadoop jar xxxxxxxx.jar 参数1,参数2... 提交到哪里去? 把本地的mr程序提交到yarn集群上去 yarn给你分配资源 分布式计算
示例2:单词统计 大数据分析的本质就是各种统计。业务简单 思想不简单。 目的:深入并且理解MapReduce执行流程。 map阶段执行流程 shuffle阶段 reduce阶段执行流程
MR python的接口 目的:业务逻辑实现可以通过不同的编程语言 python基础语法 python脚本执行--->查缺补漏
mapper阶段:
1、maptask个数问题 内部机制:逻辑切片 逻辑规划 split size=block size =128M =1个maptask处理 2、TextInputFormat 按行读取数据。其中返回kv键值对,v是这一行内容。 3、交给用户进行map阶段业务逻辑处理 【用户代码】 一行数据处理一次 4、Partition 输出的结果进行分区的计算 5、collect 将输出的结果写入内存缓冲区 默认100M 触发溢写的比例 spill percent 0.8 6、spill 溢出 溢写。 把缓冲区的数据写入到磁盘临时文件中。 7、sort Combiner【可选】 排序 key的字典序 8、merge 将所有在磁盘上溢写文件合并成为最终一个文件 等待reducetask来拉取
reducer阶段: 1、reducetask个数问题【并行度机制】: 默认永远1个
可以人为干预
2、copy reducetask启动线程去maptask那里拉取数据 拉取数据的线程 fetcher 3、merge sort 合并数据 排序 key的字典序 4、grouping 分组:key相同的分为一组 一组去处理一次 5、交给用户进行reduce阶段业务逻辑处理【用户代码】 一组数据处理一次 6、TextOutputFormat 默认输出组件 将处理的结果输出到指定的目录下 要求这个目录不能提前存在
1、MapReduce程序输入、输出有何讲究 细节点 易错点 默认输入组件 TextInputFormat 指向文件:处理该文件 指向目录:处理该目录下所有文件
默认输出组件 TextOutputFormat 输出路径必须不能存在 否则报错 数据只要来的MapReduce框架中,在任何时候都是以<key,value>键值对的形式存在的 shuffle机制 什么是shuffle 缺点是什么 Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle map端shuffle有哪些步骤: partition 分区 collect 收集倒内存缓存区 splill 溢写 sort 排序 combiner 规约 merge 合并 reduce端shuffle有哪些步骤: copy拉取数据 merge 合并 sort 排序 grouping 分组