介绍
在旭日东升的古老土地上,富士山的雄伟山峰之间,隐藏着一个繁荣的忍者村落。在这里,隐秘、精准和机智的艺术被磨砺至完美。在这个村落的精英行列中,有一位名为 Yuki 的忍者武器大师,她声名远扬。
Yuki 的锻造坊令人叹为观止,见证了她坚定不移的奉献精神和创造力。她用最优质的钢材打造出能够优雅地划破空气的刀刃,能够精准命中目标的飞镖(shuriken),以及能够穿透最坚硬盔甲的苦无(kunai)。
然而,Yuki 的真正造诣不仅在于她的工艺,还在于她管理村落资源的能力。随着忍者家族的壮大,对武器和装备的需求也随之增加,Yuki 肩负起确保每位忍者都能在需要时获得所需工具的重任。
正是在这一追求中,Yuki 发现了 Hadoop 资源管理器(Hadoop Resource Manager)的力量,这是一个强大的工具,能够帮助她高效地分配和管理村落的资源,确保每位忍者的任务都能成功完成。
理解 Hadoop 资源管理器
在这一步中,我们将深入探讨 Hadoop 资源管理器的基础知识及其在 Hadoop 生态系统中的作用。
首先,切换默认用户:
su - hadoop
Hadoop 资源管理器是 Hadoop 中 YARN(Yet Another Resource Negotiator)架构的关键组件。它负责管理集群的计算资源,并在可用节点之间调度应用程序。
首先,让我们了解资源管理器的架构:
+------------------+
| Resource Manager|
+------------------+
| Scheduler |
| ApplicationsMaster
| NodeManager |
+------------------+
资源管理器由三个主要组件组成:
- 调度器(Scheduler):该组件负责根据预定义的调度策略为各种运行的应用程序分配资源。
- 应用程序管理器(ApplicationsManager):该组件负责接受作业提交,协商执行 ApplicationMaster 的第一个容器,并提供在失败时重启 ApplicationMaster 容器的服务。
- 节点管理器(NodeManager):该组件在集群中的每个节点上运行,负责启动和监控由调度器分配的容器。
为了更好地理解资源管理器的功能,让我们通过一个简单的示例进行探索。
向集群提交一个示例 MapReduce 作业:
yarn jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar pi 16 1000000
检查作业的状态:
yarn application -list
输出应类似于以下内容:
2024-03-23 22:48:44,206 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at /0.0.0.0:8032
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):1
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
application_1711205220447_0001 QuasiMonteCarlo MAPREDUCE hadoop default RUNNING UNDEFINED
在这个示例中,我们使用 yarn 命令向集群提交了一个 MapReduce 作业。资源管理器接收作业请求,并分配必要的资源(容器)来运行作业。然后,我们可以使用提供的命令检查作业的状态并查看日志。
配置资源管理器
在这一步中,我们将探讨如何配置资源管理器以满足忍者村落的具体需求。
资源管理器的行为可以通过各种配置属性进行自定义。这些属性通常设置在 Hadoop 配置目录(/home/hadoop/hadoop/etc/hadoop)中的 yarn-site.xml 文件中。
让我们查看 'yarn' 配置文件并为其添加一些额外的配置:
vim /home/hadoop/hadoop/etc/hadoop/yarn-site.xml
添加以下配置:
<!-- 指定调度策略 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<!-- 配置并发运行的最大应用程序数量 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<!-- 配置每个容器的最小和最大虚拟核心数 -->
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>4</value>
</property>
在这个配置文件中,我们设置了以下属性:
yarn.resourcemanager.scheduler.class:指定要使用的调度策略。在这里,我们使用了公平调度器(Fair Scheduler),以确保资源在应用程序之间公平分配。yarn.scheduler.maximum-allocation-mb:设置单个容器可以分配的最大内存量(以兆字节为单位)。yarn.scheduler.minimum-allocation-vcores和yarn.scheduler.maximum-allocation-vcores:分别定义可以为容器分配的最小和最大虚拟核心数。
要应用这些配置更改,我们需要重启 Hadoop 服务。
监控和管理应用程序
在这一步中,我们将学习如何使用资源管理器(Resource Manager)监控和管理运行在 Hadoop 集群上的应用程序。
资源管理器提供了一个 Web 用户界面(UI),允许你监控和管理集群的资源以及正在运行的应用程序。要访问资源管理器 UI,请打开浏览器并导航到 http://<resource-manager-hostname>:8088。
在资源管理器 UI 中,你会看到多个部分,这些部分提供了关于集群、节点和应用程序的信息。以下是一些关键功能:
- 集群指标(Cluster Metrics):此部分显示集群的整体指标,例如总可用资源、正在运行的应用程序数量以及资源利用率。
- 节点管理器(Node Managers):此部分列出集群中所有活动的 NodeManager,以及它们的状态、可用资源和正在运行的容器。
- 正在运行的应用程序(Running Applications):此部分显示当前正在运行的应用程序、它们的进度、资源使用情况和其他详细信息。
- 应用程序历史(Application History):此部分提供已完成应用程序的历史视图,包括它们的日志和指标。
为了演示如何使用资源管理器 UI 管理应用程序,让我们向集群提交一个新的应用程序。
## 向集群提交一个 WordCount 作业
yarn jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /home/hadoop/input /home/hadoop/output
此脚本向集群提交了一个 WordCount MapReduce 作业。在运行脚本之前,请确保创建输入目录并将一些文本文件放入其中:
hdfs dfs -mkdir -p /home/hadoop/input
hdfs dfs -put /home/hadoop/hello.txt /home/hadoop/input
提交作业后,你可以从资源管理器 UI 中监控其进度并管理它。你可以查看作业的日志、在必要时终止作业,或者在作业完成后检查输出目录。
查看输入文件内容:
hadoop:~/ $ hadoop fs -cat /home/hadoop/input/* [22:56:37]
hello labex
hello hadoop
hello spark
hello flink
查看输出文件内容:
hadoop:~/ $ hadoop fs -cat /home/hadoop/output/* [22:57:37]
flink 1
hadoop 1
hello 4
labex 1
spark 1
总结
在本实验中,我们探索了 Hadoop 资源管理器(Hadoop Resource Manager),这是一个强大的工具,能够在 Hadoop 集群中实现高效的资源分配和管理。我们深入了解了资源管理器的架构,学习了如何根据特定需求配置它,并掌握了监控和管理集群上运行的应用程序的各种技术。
通过忍者武器大师 Yuki 的旅程,我们见证了资源管理器在确保每位忍者都能获得成功任务所需工具方面的变革性力量。正如 Yuki 掌握了资源管理的艺术,我们也可以利用 Hadoop 资源管理器的能力来优化大数据处理工作流。
本实验不仅提供了资源管理器的实践操作经验,还加深了对 Hadoop 生态系统及其多功能组件的理解。通过拥抱资源管理和高效调度的原则,我们可以解锁数据处理能力的新境界,并应对最艰巨的大数据挑战。



