一、分布式计算框架MapReduce
1、产生背景
web2.0时代以来,数据量爆炸式,指数级增长,大数据分布式计算需求很大
单单通过单机内存扩展来增强计算能力,已无法满足。
分布式计算和开发多程序员门槛过高。
2、MapReduce是什么
MapReduce是一种编程模型,是面向大数据处理的计算模型,框架和平台。
3、基本特点
分布可靠,将对数据集的操作分发给多个节点进行操作,各个节点会周期性的返回操作状态
封装了实现细节,基于框架API编程,基于业务进行编码
提供跨语言编程的能力
二、MapReduce运行流程
1、MapReduce的主要功能
1.1数据划分和计算任务调度
分配和调度计算节点并且进行监控和控制
1.2数据/代码相互定位
为减少数据通信,更多的是做到本地节点尽量处理本地的数据(代码向数据迁移),但如果没办法实现则还是要寻找最近的处理节点。(数据向代码迁移)。
1.3系统优化
一个 Reduce
节点所处理的数据可能会来自多个 Map 节点,为了避免 Reduce 计算阶段发生数据处理不平衡,Map 节
点输出的中间结果需使用一定的策略进行适当的划分处理,保证相关性数据发送到同一个 Reduce 节
点
1.4出错检测和修复
MapReduce可以检测并且隔离出错的节点,并且接管未完成的任务,并分配新的节点。
2、MapReduce的运行流程
首先提交作业代码,并对数据源进行切片
master调度worker执行map任务
worker读取数据源切片,读取任务并将结果存储在本地
master调度worker执行reduce任务,读取map任务的输出文件
执行reduce任务并将结果存储在hdfs
三、MapReduce Java API应用
1、MapReduce开发流程
搭建开发环境,参考 HDFS 环境搭建,基本一致
基于 MapReduce 框架编写代码,Map、Reduce、Driver 三部分组成。
编译打包,将源代码和依赖 jar 包打成一个包
上传至运行环境
运行 hadoop jar 命令,现已由 yarn jar 替代,建议使用新命令提交执行
具体提交命令为:
yarn jar testhdfs-jar-with-dependencies.jar com.tianliangedu.driver.WordCount
/tmp/tianliangedu/input /tmp/tianliangedu/output3
通过 yarn web ui 查看执行过程
查看执行结果
四、MapReduce经典问题
1、向外横向拓展,而不是向上纵向拓展
集群的构建完全选用价格便宜、易于扩展的低端商用服务器,而非价格昂贵不易扩展的商用
服务
大规模数据处理和大规模数据存储的需要,讲求集群综合能力,而非单台机器处理能力,横
向增加机器节点数据量
2、失效被认为是常态
使用大量普通服务器,节点硬件和软件出错是常态
具备多种有效的错误检测和恢复机制,在某个计算节点失效后会自动转移到别的计算节点。
某个任务节点失败后其他节点能够无缝接管失效节点的计算任务
当失效节点恢复后自动无缝加入集群,不需要管理员人工进行系统配置
3、移动计算,代码移向数据
采用代码/数据互定位的功能,计算和数据在同一个机器节点或者是同一个机架中,发挥数
据本地化特点
可避免跨机器节点或是机架传输数据,提高运行效率
4、顺序处理数据,避免随机访问
磁盘的顺序访问远比随机访问快得多,因此 MapReduce 设计为面向顺序式大规模数据的磁盘
访问处理
利用集群中的大量数据存储节点同时访问数据,实现面向大数据集批处理的高吞吐量的并行
处理
5、推测执行
一个作业由若干个 Map 任务和 Reduce 任务构成,整个作业完成的时间取决于最慢的任务的
完成时间。由于节点硬件、软件问题,某些任务可能运行很慢
采用推测执行机制,发现某个任务的运行速度远低于任务平均速度,会为慢的任务启动一个
备份任务,同时运行。哪个先运行完,采用哪个结果
6、可扩展性
可弹性的增加或减少集群计算节点来调节计算能力
计算的性能随着节点数的增加保持接近线性程度的增长