上文我们已经介绍Hadoop中HDFS分布式存储组件
今天我们来学习Hadoop生态中另两大组件Mapreduce和YARN
一、 MapReduce是hadoop三大组件之一,是分布式计算组件
Map阶段 : 将数据拆分到不同的服务器后执行Maptask任务,得到一个中间结果
Reduce阶段 : 将Maptask执行的结果进行汇总,按照Reducetask的计算 规则获得一个唯一的结果
我们在MapReduce计算框架的使用过程中,我们只需要关注,Map任务的规则,和Reduce任务的规则即可
MapReduce的核心思想是: 先分(Map)再和(Reduce)
思考: MapReduce中hadoop服务帮我们完成了什么???
我们自己完成的是map和Reduce任务的规则制定.
Hadoop 完成了:
数据的拆分多个部分分别指定不同服务进行计算
申请计算资源
读取计算数据
reduce汇总map结果
写入计算结果(hdfs)
......
Hadoop的出现大大简化了大数据的开发工作,我们只需要关注20%的业务计算,而80%的技术问题,都由hadoop 帮我们解决了.
思考: 所有的计算任务都可以使用mapreduce任务解决么? 什么样的任务可以使用mapreduce任务处理.
一个复杂任务,可以拆分为多个简单任务.
任务之间没有任何依赖关系,可以同时执行
结果之间没有依赖关系,可以随机合并.
将文件数据上传hdfs的/input目录下
cd /export/server/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output
二、YARN概述(了解)
yarn是一个分布式资源调度平台
yarn的作用是给mapreduce提供计算资源
yarn中都调度了哪些集群资源?
内存资源和cpu资源
yarn中资源调度的目的是什么?
提高集群资源的利用率,防止部分程序恶意占用资源, 采用申请制,申请多少资源就使用多少资源
yarn是hadoop生态圈发展的前提:
yarn不光可以对于hadoop平台的MR任务进行资源调度,可以对于所有的基于yarn的规则申请资源的服务进行资源调度,也就保证了我们基于hadoop组件运行的其他大数据服务可以获得合理的资源分配.
除了MapReduce,我们的Yarn还支持多种计算引擎 spark,flink等..
三、YARN架构(重要)
Yarn是标准的主从架构集群
主角色ResourceManager: 统一管理和分配集群资源,监控每一个NodeManager的健康状况.
从角色NodeManager: 统计汇报集群资源给RM,当前服务器集群资源的使用和容器拆分.监督资源回收
容器机制:
NodeManager,在程序没有执行时就预先抢占一部分资源划分为容器,等待服务进行使用
程序运行时先申请资源,RM分配资源后,由NodeManager划分出相应的资源支持程序运行
程序运行期间无法突破资源限制最多只能使用容器范围内的资源
容器资源分为: 内存资源和cpu资源
思考:
1台主机 NodeManager划分了3个容器 分别为 容器1: 1G 容器2: 2G 容器3: 3G
问题一: 如果我有一个程序需要10M内存我使用哪一个容器 容器1
问题二: 如果我有一个程序需要使用1.4G内存我使用哪一个容器 容器2
问题三: 如果我有一个程序,需要使用3.8G 内存我使用哪一个容器? 使用容器1和容器3进行合并提供给程序使用
分配集群资源时,容器可以合并,但是不能拆分.
四、MapReduce & YARN 的部署(了解)
1、集群规划(重要)
HDFS的集群规划
node1: namenode datanode
node2: SecondaryNamenode datanode
node3: datanode
如果需要扩展
node4 : datanode
node5 : datanode
.........
YARN的集群规划思考1: 哪一个角色占用资源最多??? ResourceManager
所以我们将RM放置在node1中,因为node1的服务器性能最好
思考2: hadoop中yarn集群可以和hdfs集群在同一台服务器中么?
可以,一般Hadoop服务部署时,hdfs和yarn逻辑上分离,物理上在一起.
yarn分配的是内存和cpu资源, 从而运行MapReduce计算任务,而该计算任务需要获取计算数据,计算数据存放在hdfs上,所以他们物理上在一起后数据传输速度快.
集群规划
node1: ResourceManager NodeManager | NameNode DataNode
node2: NodeManager | SecondaryNameNode DataNode
node3: Nodemanager | DataNode
如果需要扩展:
node4: Nodemanager | DataNode
node5: Nodemanager | DataNode
.....
什么叫做服务? 什么叫做服务器?
服务器: 硬件层面的概念,一个服务器可以提供给我们相应的内存,cpu,磁盘资源等,但是服务器必须有操作系统,一般是linux系统.
服务: mysql hadoop ssh 在后台运行,一直保持接受数据状态,可以随时被客户端连接的软件.
一个服务器中可以运行多个服务
MapReduce的运行需要Yarn分配资源,计算完成后资源回收,不会持久在后台保持,并不能被客户端连接, 所以他不是一个服务,也不需要搭建集群.
在Hadoop平台中有两个集群HDFS和YARN还有一个计算框架MapReduce
五、Yarn集群部署
**注意:**我们这个部署方案是在hdfs已经部署完成的基础上进行操作的,不是从0开始
- 先关闭HDFS集群
stop-dfs.sh
- 修改配置文件
进入
/export/server/hadoop/etc/hadoop
目录下进行修改
修改完node1上的配置文件后,需要远程发送到node2和node3中
scp -r /export/server/hadoop root@node2:/export/server scp -r /export/server/hadoop root@node3:/export/server
六、MapReduce & YARN 初体验(了解)
Yarn集群的启停(重要)
# 启动yarn集群
start-yarn.sh
# 停止yarn集群
stop-yarn.sh
单起单停
yarn --daemon start|stop|status resourcemanager|nodemanager
一键自动hdfs和yarn集群
# 启动
start-all.sh
# 终止
stop-all.sh
执行mapreduce任务
保证服务启动且可以正常使用(yarn 和hdfs)
示例1: 求π
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 3 1000
七、历史服务器(了解)
历史服务器:主要是为了将各个NodeManager中零散的log日志聚集起来,存放到hdfs中,启动一个历史服务器,用来统一查看历史服务信息(计算任务的执行信息)
历史服务器配置
yarn-site.xml文件
<!-- 设置yarn历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
注意: 如果修改了配置文件,一定要重启hadoop服务,否则无法生效
历史服务器启动
mapred --daemon start historyserver
历史服务器查看
node1:19888