【发布时间】:2016-01-05 02:11:46
【问题描述】:
我有一个 12 节点的集群,我正在运行一个 yarn 架构。似乎我的节点大部分时间都很忙,而且很多时候作业都失败了。如何随时查看资源的使用情况? 还有什么方法可以为用户设置有限的资源,例如:如果用户提交作业,他应该只获得 25gb 的内存和 12 个内核。
【问题讨论】:
标签: hadoop mapreduce hdfs hadoop-yarn cloudera
我有一个 12 节点的集群,我正在运行一个 yarn 架构。似乎我的节点大部分时间都很忙,而且很多时候作业都失败了。如何随时查看资源的使用情况? 还有什么方法可以为用户设置有限的资源,例如:如果用户提交作业,他应该只获得 25gb 的内存和 12 个内核。
【问题讨论】:
标签: hadoop mapreduce hdfs hadoop-yarn cloudera
有多种方法可以监控集群。
如果您使用 Cloudera 发行版,那么您可以转到 Cloudera Manager 来监控和管理资源
如果您使用的是 Hortonworks 发行版,那么您可以转到 Ambari Web 界面来监控和管理资源
如果您不使用任何发行版,则将使用 Ganglia 或 Nagios Web 界面管理集群
即使您没有这些,您也可以转到通常在 http://:8088 上运行的资源管理器 Web 界面。 8088 是默认端口号,可以自定义,你可以从 yarn-site.xml 获取该信息
如果您的组织不提供对 Web 界面的访问权限,您可以使用 yarn application --list 和 mapred job --list 等命令查看集群中发生的情况
监控实际使用情况并不乏味。你应该知道监控和开发 shell 脚本的 linux 命令。
还有什么方法可以为用户设置有限的资源,例如:如果用户提交作业,他应该只获得 25gb 的内存和 12 个内核。
是的,您需要使用 Yarn 中嵌入的调度程序的队列和池概念。调度器 FIFO 有 3 种类型,Capacity 和 Fair。 FIFO 不应该在任何集群中使用,它主要用于开发。您需要了解容量和公平调度程序并设置限制。
【讨论】:
似乎我的节点大部分时间都很忙,而且很多时候作业都失败了
您可以实施一些通用的性能调整指南来提高吞吐量。看看这个帖子:Tips to improve MapReduce Job performance in Hadoop,cloudera article 和 Map reduce performance aticle
还有什么方法可以为用户设置有限的资源,例如:如果用户提交作业,他应该只获得 25gb 的内存和 12 个内核。
添加到杜尔加的答案,
公平调度是一种将资源分配给应用程序的方法,以便所有应用程序平均随着时间的推移获得同等份额的资源。 Hadoop NextGen 能够调度多种资源类型。
默认情况下,公平调度器仅基于内存调度公平决策。它可以配置为同时使用内存和 CPU 进行调度,使用 Ghodsi 开发的主导资源公平概念。
调度程序将应用程序进一步组织成“队列”,并在这些队列之间公平地共享资源。 By default, all users share a single queue, named “default”. If an app specifically lists a queue in a container resource request, the request is submitted to that queue. It is also possible to assign queues based on the user name 通过配置包含在请求中。
例如
<user name="sample_user">
<maxRunningApps>30</maxRunningApps>
</user>
<userMaxAppsDefault>5</userMaxAppsDefault>
CapacityScheduler 旨在以操作员友好的方式将 Hadoop 应用程序作为共享的多租户集群运行,同时最大限度地提高集群的吞吐量和利用率。
传统上,每个组织都有自己的一组私有计算资源,这些资源有足够的容量来满足组织在高峰或接近高峰条件下的 SLA。这通常会导致管理多个独立集群(每个组织一个集群)的平均利用率和开销不佳
<property>
<name>yarn.scheduler.capacity.queue-mappings</name>
<value>u:user1:queue1,g:group1:queue2,u:%user:%user,u:user2:%primary_group</value>
<description>
Here, <user1> is mapped to <queue1>, <group1> is mapped to <queue2>,
maps users to queues with the same name as user, <user2> is mapped
to queue name same as <primary group> respectively. The mappings will be
evaluated from left to right, and the first valid mapping will be used.
</description>
</property>
【讨论】: