赞
踩
如何对付大数据处理场景?
对相互间不具有计算依赖关系的大数据计算任务,实现并行最自然的办法就是采取MapReduce分而治之的策略。
首先Map阶段进行拆分,把大数据拆分成若干份小数据,多个程序同时并行计算产生中间结果;然后是Reduce聚合阶段,通过程序对并行的结果进行最终的汇总计算,得出最终的结果。
注意:不可拆分的计算任务或相互间有依赖关系的数据无法进行并行计算。
构建抽象编程模型
统一架构、隐藏底层细节
MapReduce最大的亮点在于通过抽象模型和计算框架把需要做什么(what need to do)与具体怎么做(how to do)分开了,为程序员提供一个抽象和高层的编程接口和框架。
程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的业务程序代码。至于如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理:从分布代码的执行,到大到数千小到单个节点集群的自动调度使用。
分布式计算概念
Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。
MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。
MapReduce实例进程
一个完整的MapReduce程序在分布式运行时有三类
阶段组成
一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段;
不能有诸如多个map阶段、多个reduce阶段的情景出现; 如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序串行运行。
MapReduce数据类型
整个MapReduce程序中,数据都是以key-value键值对的形式流转的;
在实际编程解决各种业务问题中,需要考虑每个阶段的输入输出key-value分别是什么;
MapReduce内置了很多默认属性,比如排序、分组等,都和数据的key有关,所以说key-value的类型数据确定及其重要的
MR程序内部执行繁琐,执行速度慢,效率很低,所以很少直接使用MR进行编程计算
但是,现在仍然有不少软件依赖于MR程序执行,所以了解并学习MR 内部的执行流程对于学习其他的计算引擎有非常大的支称作用
一个MR程序包括两部分:用户编写的代码(即map阶段和reduce阶段要做什么)+Hadoop自己实现的代码
官方示例:
Monte Carlo方法计算圆周率。
jps #验证Hadoop集群是否启动
start-all.sh #启动所有集群
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/ #cd 打开
ll #查看
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 50 #提交程序,后面填上参数
需要关注的地方
shuffle概念
Map端Shuffle
Reducer端shuffle
理解YARN是一个通用资源管理系统和调度平台
- 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等。
- 调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)。
- 通用:不仅仅支持MapReduce程序,理论上支持各种计算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我。
YARN概述
YARN官方架构图
官方架构图中出现的概念
YARN3大组件
核心交互流程
整体概述
MR提交YARN交互流程
第1步、用户通过客户端向YARN中ResourceManager提交应用程序(比如hadoop jar提交MR程序);
第2步、ResourceManager为该应用程序分配第一个Container(容器),并与对应NodeManager通信,要求它在这个Container中启动这个应用程序的ApplicationMaster。
第3步、ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态(处理了百分之几);
第4步、AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态;
第5步、一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
第6步、NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
第7步、各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC 向 ApplicationMaster 查询应用程序的当前运行状态。
第8步、应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。
如何理解资源调度
调度器策略
Capacity Scheduler概述
Capacity Scheduler资源队列划分
Capacity Scheduler特性优势
Fair Scheduler概述
如何理解公平共享
Fair Scheduler特性优势
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。