2.Hadoop 分布式计算框架:Mapreduce(扩展)——Yarn资源调度器

2.Yarn资源调度器

2.3 YARN resourcemanager-HA搭建

2.3.1 文档查看与集群规划

RM高可用官方网址:
http://hadoop.apache.org/docs/r3.1.3/hadoopyarn/hadoop-yarn-site/ResourceManagerHA.html
本地进入文档首页:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3.2 相关文件配置

  1. mapred-site.xml
    local/classic/yarn
    指定mr作业运行的框架:要么本地运行(local),要么使用
    MRv1(classic)(很少用),要么使用yarn
[root@node1 ~]# cd /opt/hadoop-3.1.3/etc/hadoop/
[root@node1 hadoop]# vim mapred-site.xml 
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. yarn-site.xml
[root@node1 hadoop]# pwd
/opt/hadoop-3.1.3/etc/hadoop
[root@node1 hadoop]# vim yarn-site.xml 
<configuration>
    <!-- 让yarn的容器支持mapreduce的洗牌,开启shuffle服务 -->
    <property>
        <name>yarn.nodemanager.auxservices</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 启用resourcemanager ha -->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定zookeeper集群的各个节点地址和端口号 -->
    <property>
        <name>yarn.resourcemanager.zkaddress</name>
      
<value>node2:2181,node3:2181,node4:2181</value
>
    </property>
    <!-- 启用自动恢复 -->
    <property>
      
<name>yarn.resourcemanager.recovery.enabled</n
ame>
        <value>true</value>
    </property>
    <!-- 指定RM的状态信息存储在zookeeper集群 -->
    <property>
      
<name>yarn.resourcemanager.store.class</name>
   
<value>org.apache.hadoop.yarn.server.resourcema
nager.recovery.ZKRMStateStore</value>
 </property>
    <!-- 声明两台resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.clusterid</name>
        <value>cluster-yarn1</value>
        </property>
    <!--指定resourcemanager的逻辑列表-->
    <property>
        <name>yarn.resourcemanager.ha.rmids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- rm1的配置 -->
    <!-- 指定rm1的主机名 -->
    <property>
      
<name>yarn.resourcemanager.hostname.rm1</name>
        <value>node3</value>
    </property>
    <!-- 指定rm1的web端地址 -->
    <property>
        
<name>yarn.resourcemanager.webapp.address.rm1</
name>
         <value>node3:8088</value>
    </property>
    <!-- 指定rm1的内部通信地址 -->
    <property>
        
<name>yarn.resourcemanager.address.rm1</name>
         <value>node3:8032</value>
    </property>
    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        
<name>yarn.resourcemanager.scheduler.address.rm
1</name> 
       <value>node3:8030</value>
    </property>
    <!-- 指定供NM连接的地址 -->  
    <property>
         <name>yarn.resourcemanager.resourcetracker.address.rm1</name>
         <value>node3:8031</value>
    </property>
    <!-- rm2的配置 -->
    <!-- 指定rm2的主机名 -->
    <property>
      
<name>yarn.resourcemanager.hostname.rm2</name>
        <value>node4</value>
    </property>
    <property>
        
<name>yarn.resourcemanager.webapp.address.rm2</
name>
         <value>node4:8088</value>
    </property>
    <property>
        
<name>yarn.resourcemanager.address.rm2</name>
         <value>node4:8032</value>
    </property>
    <property>
        
<name>yarn.resourcemanager.scheduler.address.rm
2</name>
         <value>node4:8030</value>
    </property>
        <property>
         <name>yarn.resourcemanager.resourcetracker.address.rm2</name>
         <value>node4:8031</value>
    </property>
    <!-- 环境变量的继承 -->
     <property>
        <name>yarn.nodemanager.envwhitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDF
S_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCA
CHE,HADOOP_MAPRED_HOME,HADOOP_YARN_HOME</value>
    </property>
    <!-- yarn容器允许分配的最大最小内存 -->
    <property>
        <name>yarn.scheduler.minimumallocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximumallocation-mb</name>
        <value>1024</value>
    </property>
    <!-- yarn容器允许管理的物理内存大小 -->
    <property>
        <name>yarn.nodemanager.resource.memorymb</name>
        <value>1024</value>
    </property>
    <!-- 关闭yarn对物理内存的限制检查 -->
    <property>
            <name>yarn.nodemanager.pmem-checkenabled</name>
        <value>false</value>
    </property>
    <!-- 关闭yarn对虚拟内存的限制检查 -->
    <property>
        <name>yarn.nodemanager.vmem-checkenabled</name>
        <value>false</value>
    </property>
</configuration>

将配置文件在四台服务器同步

[root@node1 hadoop]# pwd
/opt/hadoop-3.1.3/etc/hadoop
[root@node1 hadoop]#scp mapred-site.xml yarnsite.xml node[234]:`pwd`

2.3.3 启动与测试

  1. 启动:
    node1上首先启动HDFS集群
[root@node1 ~]# starthdfs.sh

在node3和node4上执行命令,启动ResourceManager:

#Node3:(只能启动本机上的ResourceManager和其他节点的NodeManager)
[root@node3 ~]# start-yarn.sh
Starting resourcemanagers on [ node3 node4]
ERROR: Attempting to operate on yarn
resourcemanager as root
ERROR: but there is no
YARN_RESOURCEMANAGER_USER defined. Aborting
operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn
nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER
defined. Aborting operation.
#需要在start-yarn.sh和stop-yarn.sh中配置
YARN_RESOURCEMANAGER_USER和
YARN_NODEMANAGER_USER
[root@node3 sbin]# vim start-yarn.sh
#添加一下两条配置
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
[root@node3 sbin]# vim stop-yarn.sh
#添加一下两条配置
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
[root@node3 sbin]# start-yarn.sh
Starting resourcemanagers on [ node3 node4]
上一次登录:一 10月 25 18:00:49 CST 2021pts/1 上
Starting nodemanagers
上一次登录:一 10月 25 18:01:52 CST 2021pts/1 上
#注意:hadoop2.x版本中还需要在Node4启动另外一个RM 
yarn-daemon.sh start resourcemanager
#可以通过jps查看,也可以调用node1上的allJps.sh脚本查
看:发现node3和node4上分别多一个RM进程,node2、
node3、node4上分别多出一个NodeManager进程。
#查看服务 arn rmadmin -getServiceState rm1
[root@node3 sbin]# yarn rmadmin -getServiceState rm1 
standby
[root@node3 sbin]# yarn rmadmin -getServiceState rm2
active
 #说明node4上ResourceManager为Active状态。
  1. 测试:
    去zk集群节点上查看:
[root@node4 ~]# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[hadoop-ha, itbaizhan, registry, rmstore, wzyy,yarn-leader-election, zk001, zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /rmstore
[ZKRMStateRoot]
[zk: localhost:2181(CONNECTED) 3] ls /yarnleader-election
[cluster-yarn1]
[zk: localhost:2181(CONNECTED) 4] get -s
/rmstore/ZKRMStateRoot
null
cZxid = 0x900000014
ctime = Mon Oct 25 18:00:34 CST 2021
mZxid = 0x900000014
mtime = Mon Oct 25 18:00:34 CST 2021
pZxid = 0x90000003e
cversion = 22
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 0
numChildren = 6
[zk: localhost:2181(CONNECTED) 5] ls /yarnleader-election/cluster-yarn1
[ActiveBreadCrumb, ActiveStandbyElectorLock]
[zk: localhost:2181(CONNECTED) 6] get -s /yarnleader-election/cluster-yarn1/Active
ActiveBreadCrumb          
ActiveStandbyElectorLock  
[zk: localhost:2181(CONNECTED) 6] get -s /yarnleader-election/cluster-yarn1/ActiveBreadCrumb
cluster-yarn1rm2
cZxid = 0x90000003a
ctime = Mon Oct 25 18:02:07 CST 2021
mZxid = 0x90000003a
mtime = Mon Oct 25 18:02:07 CST 2021
pZxid = 0x90000003a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 20
numChildren = 0

通过浏览器测试:
http://node3:8088 或者 http://node4:8088 都会被重定向到状态为Active节点的信息页面上,目前我的node4上的RM是Active:
在这里插入图片描述

2.3.4 启动脚本和停止脚本:

Hadoop集群的启动脚本:startha.sh (3.x版本)

[root@node1 ~]# cd bin/
[root@node1 bin]# vim startha.sh
#!/bin/bash
#启动zk集群
for node in node2 node3 node4
do
  ssh $node "source /etc/profile;zkServer.sh start"
done
# 休眠1s
sleep 1
# 启动hdfs集群
start-dfs.sh
# 启动yarn_会自动起node4的rm
ssh node3 "source /etc/profile;start-yarn.sh"
# 查看四个节点上的java进程
allJps.sh
[root@node1 bin]# chmod +x startha.sh

Hadoop集群的关闭脚本:startha.sh (3.x版本)

[root@node1 ~]# cd bin/
[root@node1 bin]# vim stopha.sh
[root@node1 bin]# chmod 755 stopha.sh
[root@node1 bin]# ll
总用量 20
-rwxr-xr-x 1 root root 217 3月  29 19:37 allJps.sh
-rwxr-xr-x 1 root root 293 4月   3 01:25 startha.sh
-rwxr-xr-x 1 root root 187 3月  29 19:36 starthdfs.sh
-rwxr-xr-x 1 root root 233 4月   3 01:32 stopha.sh
-rwxr-xr-x 1 root root 209 3月  29 19:39 stophdfs.sh
[root@node1 bin]# cat stopha.sh
#!/bin/bash
# 先关闭yarn
ssh node3 "source /etc/profile;stop-yarn.sh"
# 关闭hdfs
stop-dfs.sh
# 关闭zk集群
for node in node2 node3 node4
do
  ssh $node "source /etc/profile;zkServer.sh stop"
done
# 查看java进程
allJps.sh

2.4.5 Yarn RM HA搭建——资源调度器介绍

目前,Hadoop作业调度器没有好坏之分,只有适合与否之分,所以Hadoop提供三种调度器让使用者进行选择,这三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop3.1.3默认的资源调度器是Capacity Scheduler。具体设置详见:yarn-default.xml文件

<!-- 修改自己搭建集群的调度器,修改yarn-site.xml文件 -->
<property>
 <description>The class to use as the resource scheduler.</description>
 <name>yarn.resourcemanager.scheduler.class</name>


<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

2.4.6 Yarn RM HA搭建资源调度器——先进先出调度器(FIFO)

在这里插入图片描述
Hadoop最初设计目的是支持大数据批处理作业,如日志挖掘、Web索引等作业,为此,Hadoop仅提供了一个非常简单的调度机制:FIFO,即先来先服务,在该调度机制下,所有作业被统一提交到一个队列中,Hadoop按照提交顺序依次运行这些作业。

但随着Hadoop的普及,单个Hadoop集群的任务处理量越来越多,不同用户提交的应用程序往往具有不同的服务质量要求,典型的应用有以下几种:

  • 批处理作业:这种作业往往耗时较长,对时间完成一般没有严格要求,如数据挖掘、机器学习等方面的应用程序。
  • 交互式作业:这种作业期望能及时返回结果,如HQL查询(Hive)等。
  • 实时统计作业:这种作业要求有一定量的资源保证,如淘宝交易量大屏等。

此外,这些应用程序对硬件资源需求量也是不同的,因此,简单的FIFO调度策略不仅不能满足多样化需求,也不能充分利用硬件资源。

2.4.7 Yarn RM HA搭建资源调度器——容量调度器(Capacity Scheduler)

在这里插入图片描述
Capacity Scheduler 是Yahoo开发的多用户调度器。

  • 它以队列为单位划分资源,支持多个队列,每个队列可设定一定比例的资源最低保证和使用上限。
  • 每个队列采用是FIFO调度策略。
  • 为了防止同一个用户的作业独占队列中的资源,调度器会对同一个用户提交的作业所占的资源量进行限定。
  • 当有任务被提交时,计算每个队列中正在运行的任务数/该对应应分得的计算资源 的比值,任务分给比值最小(最闲)的队列。
  • 每个队列最前端的作业可以并行运行。

总之,Capacity Scheduler 主要有以下几个特点:

  • 容量保证。管理员可为每个队列设置资源最低保证和资源使用上限,而所有提交到该队列的应用程序共享这些资源。
  • 灵活性,如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。这种资源灵活分配的方式可明显提高资源利用率。
  • 多重租赁。支持多用户共享集群和多应用程序同时运行。为防止单个应用程序、用户或者队列独占集群中的资源,管理员可为之增加多重约束(比如单个应用程序同时运行的任务数等)。
  • 安全保证。每个队列有严格的ACL列表规定它的访问用户,每个用户可指定哪些用户允许查看自己应用程序的运行状态或者控制应用程序(比如杀死应用程序)。此外,管理员可指定队列管理员和集群系统管理员。
  • 动态更新配置文件。管理员可根据需要动态修改各种配置参数,以实现在线集群管理。

2.4.8 Yarn RM HA搭建资源调度器——公平调度器(Fair Scheduler)

在这里插入图片描述
Fair Scheduler 是Facebook开发的多用户调度器。

公平调度器的目的是让所有的作业随着时间的推移,都能平均地获取等同的共享资源。当有作业提交上来,系统会将空闲的资源分配给新的作业,每个任务大致上会获取平等数量的资源。和传统的调度策略不同的是它会让小的任务在合理的时间完成,同时不会让需要长时间运行的耗费大量资源的任务挨饿!

同Capacity Scheduler类似,它以队列为单位划分资源,每个队列可设定一定比例的资源最低保证和使用上限,同时,每个用户也可设定一定的资源使用上限以防止资源滥用;当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。

当然,Fair Scheduler也存在很多与Capacity Scheduler不同之处,这主要体现在以下几个方面:

① 资源公平共享。在每个队列中,Fair Scheduler 可选择按照FIFO、Fair或DRF策略为应用程序分配资源。其中:

FIFO策略

公平调度器每个队列资源分配策略如果选择FIFO的话,就是禁用掉每个队列中的Task共享队列资源,此时公平调度器相当于上面讲过的容量调度器。

Fair策略

Fair 策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到1/3的资源。
【扩展:】最大最小公平算法举例:

1.不加权(关注点是job的个数):
有一条队列总资源12个, 有4个job,对资源的需求分别是: 
job1->1,  job2->2 , job3->6,  job4->5
   第一次算:  12 / 4 = 3 
        job1: 分3 --> 多2个 
        job2: 分3 --> 多1个
        job3: 分3 --> 差3个
        job4: 分3 --> 差2个
    第二次算: 3 / 2  = 1.5 
     job1: 分1
        job2: 分2
        job3: 分3 --> 差3个 --> 分1.5 --> 最终: 4.5 
        job4: 分3 --> 差2个 --> 分1.5 --> 最终: 4.5 
    第n次算: 一直算到没有空闲资源
2.加权(关注点是job的权重):
有一条队列总资源16,有4个job 
对资源的需求分别是: job1->4  job2->2  job3->10  job4->4 
每个job的权重为:  job1->5  job2->8  job3->1  job4->2   
    第一次算: 16 / (5+8+1+2) =  1
       job1:  分5 --> 多1
       job2:  分8 --> 多6
       job3:  分1 --> 少9
       job4:  分2 --> 少2      
    第二次算: 7 / (1+2) = 7/3
       job1: 分4
       job2: 分2
       job3: 分1 --> 分7/3 --> 少
       job4: 分2 --> 分14/3(4.66) -->多2.66
   第三次算: 
       job1: 分4
       job2: 分2
       job3: 分1 --> 分7/3 --> 分2.66
       job4: 分4
   第n次算: 一直算到没有空闲资源

DRF策略

DRF(Dominant Resource Fairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是yarn默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用应该分配的资源比例。

那么在YARN中,我们用DRF来决定如何调度:假设集群一共有100 CPU和10T 内存,而应用A需要(2 CPU, 300GB),应用B需要(6 CPU, 100GB)。则两个应用分别需要A(2%CPU, 3%内存)和B(6%CPU, 1%内存)的资源,这就意味着A是内存主导的, B是CPU主导的,针对这种情况,我们可以选择DRF策略对不同应用进行不同资源(CPU和内存)的一个不同比例的限制。

②支持资源抢占。当某个队列中有剩余资源时,调度器会将这些资源共享给其他队列,而当该队列中有新的应用程序提交时,调度器要为它回收资源。为了尽可能降低不必要的计算浪费,调度器采用了先等待再强制回收的策略,即如果等待一段时间后尚有未归还的资源,则会进行资源抢占:从那些超额使用资源的队列中杀死一部分任务,进而释放资源。

yarn.scheduler.fair.preemption=true 通过该配置开启资源抢占。

③提高小应用程序响应时间。由于采用了最大最小公平算法,小作业可以快速获取资源并运行完成、

3.单词数量统计案例实战

3.1 运行自带的wordcount

3.1.1 运行的命令:

[root@node1 ~]# cd /opt/hadoop-3.1.3/share/hadoop/mapreduce/
[root@node1 mapreduce]# pwd
/opt/hadoop-3.1.3/share/hadoop/mapreduce
[root@node1 mapreduce]# ll *examples-3.1.3.jar
-rw-r--r-- 1 itbaizhan itbaizhan 316382 9月 12 2019 hadoop-mapreduce-examples-3.1.3.jar
[root@node1 ~]# cd
[root@node1 ~]# vim wc.txt
hello tom
andy joy
hello rose
hello joy
mark andy
hello tom
andy rose
hello joy
[root@node1 ~]# hdfs dfs -mkdir -p /wordcount/input
[root@node1 ~]# hdfs dfs -put wc.txt /wordcount/input
[root@node1 ~]# hdfs dfs -ls /wordcount/input
Found 1 items
-rw-r--r--  3 root supergroup     80 2021-10-28 09:53 /wordcount/input/wc.txt
[root@node1 ~]# ll
-rw-r--r-- 1 root root   80 10月 28 09:52 wc.txt
[root@node1 ~]# cd -
/opt/hadoop-3.1.3/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount/input /wordcount/output
#出现如下bug:
 Requested resource=<memory:1536, vCores:1>, maximum allowed allocation=<memory:1024, vCores:4>

默认情况下AM的请求1.5G的内存,降低am的资源请求配置项到分配的物理内存限制以内。

修改配置mapred-site.xml (四台上都要修改),修改后重启hadoop集群,重启在执行

[root@node1 mapreduce] stopha.sh
[root@node1 mapreduce]# cd /opt/hadoop-3.1.3/etc/hadoop/
[root@node1 hadoop]# vim mapred-site.xml 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<configuration>
  <!-- job作业运行的资源管理使用Yarn -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
     <name>yarn.app.mapreduce.am.resource.mb</name>
     <value>256</value>
  </property>
  <!-- 默认对mapred的内存请求都是1G,也降低和合适的值。-->
  <property>
     <name>mapreduce.map.memory.mb</name>
     <value>256</value>
  </property>
  <property>
    <name>mapreduce.reduce.memory.mb</name>
    <value>256</value>
  </property>
</configuration>

但如果太低也会出现OOM的问题。ERROR [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space

[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.1.3.jar wordcount /wordcount/input /wordcount/output
2021-10-28 10:33:10,194 INFO client.ConfiguredRMFailoverProxyProvider: Failing over to rm2
2021-10-28 10:33:10,635 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1635388346175_0001
2021-10-28 10:33:10,837 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-10-28 10:33:11,853 INFO input.FileInputFormat: Total input files to process : 1
2021-10-28 10:33:11,927 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-10-28 10:33:12,042 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-10-28 10:33:12,092 INFO mapreduce.JobSubmitter: number of splits:1
2021-10-28 10:33:12,299 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-10-28 10:33:12,364 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1635388346175_0001
2021-10-28 10:33:12,364 INFO mapreduce.JobSubmitter: Executing with tokens: []
2021-10-28 10:33:12,662 INFO conf.Configuration: resource-types.xml not found
2021-10-28 10:33:12,663 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2021-10-28 10:33:13,177 INFO impl.YarnClientImpl: Submitted application application_1635388346175_0001
2021-10-28 10:33:13,235 INFO mapreduce.Job: The url to track the job: http://node4:8088/proxy/application_1635388346175_0001/
2021-10-28 10:33:13,235 INFO mapreduce.Job: Running job: job_1635388346175_0001
2021-10-28 10:33:22,435 INFO mapreduce.Job: Job job_1635388346175_0001 running in uber mode : false
2021-10-28 10:33:22,438 INFO mapreduce.Job:  map 0% reduce 0%
2021-10-28 10:33:30,575 INFO mapreduce.Job:  map 100% reduce 0%
2021-10-28 10:33:36,661 INFO mapreduce.Job:  map 100% reduce 100%
2021-10-28 10:33:37,685 INFO mapreduce.Job: Job job_1635388346175_0001 completed successfully
2021-10-28 10:33:37,827 INFO mapreduce.Job: Counters: 53
    File System Counters
        FILE: Number of bytes read=71
        FILE: Number of bytes written=442495
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=184
        HDFS: Number of bytes written=41
        HDFS: Number of read operations=8
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters 
        Launched map tasks=1
        Launched reduce tasks=1
        Data-local map tasks=1
        Total time spent by all maps in occupied slots (ms)=5238
        Total time spent by all reduces in occupied slots (ms)=3935
        Total time spent by all map tasks (ms)=5238
        Total time spent by all reduce tasks (ms)=3935
        Total vcore-milliseconds taken by all map tasks=5238
        Total vcore-milliseconds taken by all reduce tasks=3935
        Total megabyte-milliseconds taken by all map tasks=2681856
        Total megabyte-milliseconds taken by all reduce tasks=2014720
    Map-Reduce Framework
        Map input records=8
        Map output records=16
        Map output bytes=144
        Map output materialized bytes=71
        Input split bytes=104
        Combine input records=16
        Combine output records=6
        Reduce input groups=6
        Reduce shuffle bytes=71
        Reduce input records=6
        Reduce output records=6
        Spilled Records=12
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=411
        CPU time spent (ms)=1930
        Physical memory (bytes) snapshot=375353344
        Virtual memory (bytes) snapshot=3779186688
        Total committed heap usage (bytes)=210911232
        Peak Map Physical memory (bytes)=203862016
        Peak Map Virtual memory (bytes)=1874542592
        Peak Reduce Physical memory (bytes)=171491328
        Peak Reduce Virtual memory (bytes)=1904644096
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters 
        Bytes Read=80
    File Output Format Counters 
        Bytes Written=41



*input:是hdfs文件系统中数据所在的目录

*ouput:是hdfs中不存在的目录,mr程序运行的结果会输出到该目录

3.1.2 输出目录内容:

[root@node1 mapreduce]# hdfs dfs -ls /wordcount/output
Found 2 items
-rw-r--r--  3 root supergroup     0 2021-10-28 10:33 /wordcount/output/_SUCCESS
-rw-r--r--  3 root supergroup     41 2021-10-28 10:33 /wordcount/output/part-r-00000
[root@node1 mapreduce]# hdfs dfs -cat /wordcount/output/part-r-00000
andy    3
hello   5
joy 3
mark    1
rose    2
tom 2

/_SUCCESS:是信号/标志文件

/part-r-00000:是reduce输出的数据文件

r:reduce的意思,00000是对应的reduce编号,多个reduce会有多个数据文

猜你喜欢

转载自blog.csdn.net/m0_63953077/article/details/129910749