Hadoop基础——MapReduce & YARN

本文介绍了MapReduce在Hadoop生态系统中的作用,包括其工作原理(分Map和Reduce阶段),YARN架构的角色分配(ResourceManager和NodeManager),以及容器机制。还详细讲述了如何在已部署HDFS的YARN集群上配置MapReduce,执行计算任务如求π和词频统计,以及历史服务器的配置和使用。
摘要由CSDN通过智能技术生成

MapReduce概述

MapReduce是hadoop三大组件之一,是分布式计算组件

Map阶段 : 将数据拆分到不同的服务器后执行Maptask任务,得到一个中间结果

Reduce阶段 : 将Maptask执行的结果进行汇总,按照Reducetask的计算 规则获得一个唯一的结果

我们在MapReduce计算框架的使用过程中,我们只需要关注,Map任务的规则,和Reduce任务的规则即可

MapReduce的核心思想是: 先分(Map)再和(Reduce)

YARN架构

Yarn是标准的主从架构集群

主角色ResourceManager: 统一管理和分配集群资源,监控每一个NodeManager的健康状况.

从角色NodeManager: 统计汇报集群资源给RM,当前服务器集群资源的使用和容器拆分.监督资源回收

容器机制:

NodeManager,在程序没有执行时就预先抢占一部分资源划分为容器,等待服务进行使用

程序运行时先申请资源,RM分配资源后,由NodeManager划分出相应的资源支持程序运行

程序运行期间无法突破资源限制最多只能使用容器范围内的资源

容器资源分为: 内存资源和cpu资源

 

集群规划

HDFS的集群规划

node1: namenode datanode

node2: SecondaryNamenode datanode

node3: datanode

如果需要扩展

node4 : datanode

node5 : datanode

.........

hadoop中yarn集群可以和hdfs集群在同一台服务器中,一般Hadoop服务部署时,hdfs和yarn逻辑上分离,物理上在一起.yarn分配的是内存和cpu资源, 从而运行MapReduce计算任务,而该计算任务需要获取计算数据,计算数据存放在hdfs上,所以他们物理上在一起后数据传输速度快.

 YARN的集群规划

集群规划

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已经部署 )

1.先关闭HDFS集群

stop-dfs.sh

2.修改配置文件

进入/export/server/hadoop/etc/hadoop目录下进行修改

 mapred-site.xml文件

<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
​
<!-- MR程序历史服务器端地址 -->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node1:10020</value>
</property>
 
<!-- 历史服务器web端地址 -->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>node1:19888</value>
</property>
​
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
​
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
​
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

 yarn-site.xml文件

<!-- 设置YARN集群主角色运行机器位置 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
</property>
​
<!-- 为MapReduce开启shuffle服务 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
​
<!-- NodeManager本地数据存储路径 -->
<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
</property>
​
<!-- NodeManager日志数据存储路径 -->
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
</property>
​
<!-- 设置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>

修改完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

可以将计算π的任务进行拆分,拆分为多个互不相关的子任务,且多个任务的计算结果进行统计后可以使获得一个精确度更高的最终结果

这样做可以使用分布式的方式进行计算,提高计算效率

 

词频统计

# 1. 创建一个文件words.txt内部书写如下单词组合
itheima itcast itheima itcast
hadoop hdfs hadoop hdfs
hadoop mapreduce hadoop yarn
itheima hadoop itcast hadoop
itheima itcast hadoop yarn mapreduce
​
# 2. 创建输入和输出目录,并且将words文件上传到输入目录中
hadoop fs -mkdir -p /input/wordcount
hadoop fs -mkdir /output
hadoop fs -put words.txt /input/wordcount/
​
# 3. 执行示例
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount hdfs://node1:8020/input/wordcount  hdfs://node1:8020/output/wc
​
# 注意: 输入目录必须存在,输出目录必须不存在,否则报错

历史服务器

历史服务器:主要是为了将各个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

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值