2.Yarn资源调度器
2.3 YARN resourcemanager-HA搭建
2.3.1 文档查看与集群规划
RM高可用官方网址:
/docs/r3.1.3/hadoopyarn/hadoop-yarn-site/ResourceManagerHA.html
本地进入文档首页:
2.3.2 相关文件配置
mapred-site.xmllocal/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>
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</name><value>true</value></property><!-- 指定RM的状态信息存储在zookeeper集群 --><property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.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.rm1</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.rm2</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_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,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 启动与测试
启动:node1上首先启动HDFS集群
[root@node1 ~]# starthdfs.sh
在node3和node4上执行命令,启动ResourceManager:
#Node3:(只能启动本机上的ResourceManager和其他节点的NodeManager)[root@node3 ~]# start-yarn.shStarting resourcemanagers on [ node3 node4]ERROR: Attempting to operate on yarnresourcemanager as rootERROR: but there is noYARN_RESOURCEMANAGER_USER defined. Abortingoperation.Starting nodemanagersERROR: Attempting to operate on yarnnodemanager as rootERROR: but there is no YARN_NODEMANAGER_USERdefined. Aborting operation.#需要在start-yarn.sh和stop-yarn.sh中配置YARN_RESOURCEMANAGER_USER和YARN_NODEMANAGER_USER[root@node3 sbin]# vim start-yarn.sh#添加一下两条配置YARN_RESOURCEMANAGER_USER=rootYARN_NODEMANAGER_USER=root[root@node3 sbin]# vim stop-yarn.sh#添加一下两条配置YARN_RESOURCEMANAGER_USER=rootYARN_NODEMANAGER_USER=root[root@node3 sbin]# start-yarn.shStarting resourcemanagers on [ node3 node4]上一次登录:一 10月 25 18:00:49 CST pts/1 上Starting nodemanagers上一次登录:一 10月 25 18:01:52 CST pts/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 rm2active#说明node4上ResourceManager为Active状态。
测试:
去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/ZKRMStateRootnullcZxid = 0x900000014ctime = Mon Oct 25 18:00:34 CST mZxid = 0x900000014mtime = Mon Oct 25 18:00:34 CST pZxid = 0x90000003ecversion = 22dataVersion = 0aclVersion = 2ephemeralOwner = 0x0dataLength = 0numChildren = 6[zk: localhost:2181(CONNECTED) 5] ls /yarnleader-election/cluster-yarn1[ActiveBreadCrumb, ActiveStandbyElectorLock][zk: localhost:2181(CONNECTED) 6] get -s /yarnleader-election/cluster-yarn1/ActiveActiveBreadCrumbActiveStandbyElectorLock [zk: localhost:2181(CONNECTED) 6] get -s /yarnleader-election/cluster-yarn1/ActiveBreadCrumbcluster-yarn1rm2cZxid = 0x90000003actime = Mon Oct 25 18:02:07 CST mZxid = 0x90000003amtime = Mon Oct 25 18:02:07 CST pZxid = 0x90000003acversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 20numChildren = 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 node4dossh $node "source /etc/profile;zkServer.sh start"done# 休眠1ssleep 1# 启动hdfs集群start-dfs.sh# 启动yarn_会自动起node4的rmssh 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# 先关闭yarnssh node3 "source /etc/profile;stop-yarn.sh"# 关闭hdfsstop-dfs.sh# 关闭zk集群for node in node2 node3 node4dossh $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: 分1job2: 分2job3: 分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) = 1job1: 分5 --> 多1job2: 分8 --> 多6job3: 分1 --> 少9job4: 分2 --> 少2第二次算: 7 / (1+2) = 7/3job1: 分4job2: 分2job3: 分1 --> 分7/3 --> 少job4: 分2 --> 分14/3(4.66) -->多2.66第三次算: job1: 分4job2: 分2job3: 分1 --> 分7/3 --> 分2.66job4: 分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 hadoop-mapreduce-examples-3.1.3.jar[root@node1 ~]# cd[root@node1 ~]# vim wc.txthello tomandy joyhello rosehello joymark andyhello tomandy rosehello joy[root@node1 ~]# hdfs dfs -mkdir -p /wordcount/input[root@node1 ~]# hdfs dfs -put wc.txt /wordcount/input[root@node1 ~]# hdfs dfs -ls /wordcount/inputFound 1 items-rw-r--r-- 3 root supergroup80 -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/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations 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-10-28 10:33:10,194 INFO client.ConfiguredRMFailoverProxyProvider: Failing over to rm2-10-28 10:33:10,635 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1635388346175_0001-10-28 10:33:10,837 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false-10-28 10:33:11,853 INFO input.FileInputFormat: Total input files to process : 1-10-28 10:33:11,927 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false-10-28 10:33:12,042 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false-10-28 10:33:12,092 INFO mapreduce.JobSubmitter: number of splits:1-10-28 10:33:12,299 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false-10-28 10:33:12,364 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1635388346175_0001-10-28 10:33:12,364 INFO mapreduce.JobSubmitter: Executing with tokens: []-10-28 10:33:12,662 INFO conf.Configuration: resource-types.xml not found-10-28 10:33:12,663 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.-10-28 10:33:13,177 INFO impl.YarnClientImpl: Submitted application application_1635388346175_0001-10-28 10:33:13,235 INFO mapreduce.Job: The url to track the job: http://node4:8088/proxy/application_1635388346175_0001/-10-28 10:33:13,235 INFO mapreduce.Job: Running job: job_1635388346175_0001-10-28 10:33:22,435 INFO mapreduce.Job: Job job_1635388346175_0001 running in uber mode : false-10-28 10:33:22,438 INFO mapreduce.Job: map 0% reduce 0%-10-28 10:33:30,575 INFO mapreduce.Job: map 100% reduce 0%-10-28 10:33:36,661 INFO mapreduce.Job: map 100% reduce 100%-10-28 10:33:37,685 INFO mapreduce.Job: Job job_1635388346175_0001 completed successfully-10-28 10:33:37,827 INFO mapreduce.Job: Counters: 53File System CountersFILE: Number of bytes read=71FILE: Number of bytes written=442495FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=184HDFS: Number of bytes written=41HDFS: Number of read operations=8HDFS: Number of large read operations=0HDFS: Number of write operations=2Job Counters Launched map tasks=1Launched reduce tasks=1Data-local map tasks=1Total time spent by all maps in occupied slots (ms)=5238Total time spent by all reduces in occupied slots (ms)=3935Total time spent by all map tasks (ms)=5238Total time spent by all reduce tasks (ms)=3935Total vcore-milliseconds taken by all map tasks=5238Total vcore-milliseconds taken by all reduce tasks=3935Total megabyte-milliseconds taken by all map tasks=2681856Total megabyte-milliseconds taken by all reduce tasks=720Map-Reduce FrameworkMap input records=8Map output records=16Map output bytes=144Map output materialized bytes=71Input split bytes=104Combine input records=16Combine output records=6Reduce input groups=6Reduce shuffle bytes=71Reduce input records=6Reduce output records=6Spilled Records=12Shuffled Maps =1Failed Shuffles=0Merged Map outputs=1GC time elapsed (ms)=411CPU time spent (ms)=1930Physical memory (bytes) snapshot=375353344Virtual memory (bytes) snapshot=3779186688Total committed heap usage (bytes)=210911232Peak Map Physical memory (bytes)=20386Peak Map Virtual memory (bytes)=1874542592Peak Reduce Physical memory (bytes)=171491328Peak Reduce Virtual memory (bytes)=1904644096Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=80File Output Format Counters Bytes Written=41
*input:是hdfs文件系统中数据所在的目录
*ouput:是hdfs中不存在的目录,mr程序运行的结果会输出到该目录
3.1.2 输出目录内容:
[root@node1 mapreduce]# hdfs dfs -ls /wordcount/outputFound 2 items-rw-r--r-- 3 root supergroup0 -10-28 10:33 /wordcount/output/_SUCCESS-rw-r--r-- 3 root supergroup41 -10-28 10:33 /wordcount/output/part-r-00000[root@node1 mapreduce]# hdfs dfs -cat /wordcount/output/part-r-00000andy 3hello 5joy 3mark 1rose 2tom 2
/_SUCCESS:是信号/标志文件
/part-r-00000:是reduce输出的数据文件
r:reduce的意思,00000是对应的reduce编号,多个reduce会有多个数据文
如果觉得《2.Hadoop 分布式计算框架:Mapreduce(扩展)——Yarn资源调度器》对你有帮助,请点赞、收藏,并留下你的观点哦!