公平调度是一个多用户的MapReduce作业调度程序,使企业能够共享在多个用户之间的大型集群,并确保所有的工作获得的CPU时间大致相等的份额。
公平调度组织工作成池和共享资源,公平地对所有池。默认情况下,每个用户分配一个独立的游泳池,因此,获得群集的一个相等的份额,无论有多少就业机会,他们提交。在每个池中,公平分享是用来分享的正在运行的作业的能力。池也可以被赋予权重,在配置文件中不按比例分担集群。
使用公平调度器,你可以定义最小保证能力定制池。
启用公平调度
为了使公平调度器在你的MAPR集群,定义mapred.jobtracker.taskScheduler
物业mapred-site.xml的
文件,并在设置几个公平调度器性能mapred-site.xml的
文件。
- 定义
mapred.fairscheduler.allocation.file
属性来conf /中pools.xml在mapred-site.xml的
文件。 - 定义
mapred.jobtracker.taskScheduler
财产在mapred-site.xml的
文件。 - 该设置
mapred.fairscheduler.assignmultiple
属性为真在mapred-site.xml的
文件。 - 该设置
mapred.fairscheduler.eventlog.enabled
属性为假的mapred-site.xml的
文件。 - 重新启动JobTracker的,然后检查公平调度器运行时通过将
包含http:// <jobtracker URL> /调度器
上的JobTracker的的web用户界面。例如,浏览到http://localhost:50030/scheduler
运行作业跟踪器的节点上。有关作业调度管理页面的详细信息,请参阅管理公平调度。
配置公平调度
以下属性可以设置在mapred-site.xml的
配置公平调度。无论何时更改公平调度器的属性,你必须重新启动JobTracker的。
属性 |
描述 |
---|---|
|
指定路径的XML文件(conf /中pools.xml),其中包含分配给每个池,以及每个缓冲池和每用户限制对正在运行的作业数量。如果未提供此属性,分配不使用。 |
|
一个布尔属性,允许调度分配既是一个map任务,并在每次心跳reduce任务。这提高了集群的吞吐量的时候有很多小任务来执行。默认值:假的。 |
|
如果属实,一个作业的大小是考虑到在计算其权重公平共享。给该作业的重量是成正比所需的任务数目的对数。如果假,作业的重量上它的优先级完全基于。 |
|
指定哪个jobconf属性用来确定一个作业所属英寸字符串,默认池:user.name(即一个池中为每个用户)。其他一些有用的值设置为如下:
|
|
一个布尔值属性启用抢占。默认值:假的。 |
公平调度ExpressLane
MAPR提供了一个明确的路径,小MapReduce作业时,所有插槽都用较长的任务占用运行。小的工作只给这个特殊的处理,当集群忙,只有在满足了以下参数中指定的标准mapred-site.xml中
:
属性 |
值 |
描述 |
---|---|---|
|
真 |
启用公平调度器里面的小任务快速调度。的TaskTracker应预留一个叫做它用于smalljob如果集群忙短暂插槽插槽。 |
|
10 |
小作业定义。在小作业可以映射最大数。 |
|
10 |
小作业定义。在小作业可以减速器的最大数目。 |
|
10737418240 |
小作业定义。允许在一个小职位字节最大输入尺寸。默认为10GB。 |
|
1073741824 |
小作业定义。估计最大输入尺寸小作业可以减速。默认为每减速1GB。 |
|
200 |
小作业定义。最大内存预留一个短暂的插槽兆字节。默认值是200MB。这个值必须在JobTracker的和TaskTracker必须节点是相同的。 |
出现以适应小的工作定义,但实际上比预期的更大的MapReduce作业被杀死和重新排队等待正常执行。
公平调度器扩展点
的公平调度器提供了几个扩展点,通过它的基本功能可以扩展。例如,权重计算可以进行修改,以给予优先级提升到新的就业机会,实施了“最短作业优先”政策,降低了响应时间为交互式作业更进一步。
|
指定运行调节工作的权重类。这个类应该实现WeightAdjuster接口。 目前一个示例实现:在
|
|
指定一个类,它决定了地图和减少可在给定TaskTracker必须运行。这个类应该实现LoadManager接口。默认情况下,Hadoop的配置文件中的任务瓶盖的使用,但可以使用此选项,以使根据可用内存和CPU使用率,例如负载。 |
|
指定一个类,它决定发动对一个给定的跟踪该任务从任务中。这可以用来改变无论是当地的政策(例如,保留一些职位特定的机架内)或推测执行算法(选择何时推出投机性任务)。默认情况下,它使用从JobInProgress Hadoop的默认算法。 |
管理公平调度
你可以管理的公平调度器在使用两种机制运行:
- 分配配置文件:可以通过编辑配置配置文件来修改池的资源分配和用户和池正在运行的作业限制在运行时。它看到后,它被修改调度程序将重新载入该文件10-15秒。
-
JobTracker的web界面:目前的工作,池和公平共享可以通过JobTracker的网络界面进行审查,在
包含http:// <jobtracker URL> /调度
。例如,浏览到http://localhost:50030/scheduler
运行作业跟踪器的节点上。在Web界面中,你可以修改作业优先级,移动池之间的工作,看看对公平份额的影响。
对于每个作业,Web界面显示以下字段:
场 |
描述 |
---|---|
提交 |
显示日期和时间提交作业。 |
作业ID,用户名 |
显示作业标识符作为标准的web用户界面。 |
水池 |
显示作业的当前池。选择另一个值来移动工作到另一个池。 |
优先 |
显示作业的当前优先级。选择另一个值来更改作业的优先级。 |
地图/降低成品 |
显示任务完成/总任务数。 |
地图/降低了运行 |
显示当前正在运行的任务。 |
Map / Reduce的公平共享 |
显示这项工作应该按照公允分享在任何给定时间的任务槽的平均数量。任务的实际数量将上升和下降取决于作业多少计算时间了,但平均将获得其公平份额数量。 |
在先进的Web用户界面(导航到?包含http:// <jobtracker URL> /调度高级),您可以查看显示内部计算这些额外的列:
场 |
描述 |
---|---|
地图/减少重量 |
显示作业的重量在公平共享计算。作业的重量取决于其优先权以及任选地,如果 |
Map / Reduce的赤字 |
显示机器秒作业的调度赤字,也就是说,资源的作业量应根据其公平的份额收到,减去其实际收到的金额。正值表示该作业将在不久的将来再次被调度,因为它需要赶上其公平份额。公平调度器调度作业具有更高的赤字占先机。请参阅#公平调度实施细则的详细信息。 |
公平调度实施细则
有两个方面来实现公平调度:
- 计算每个作业的公平份额
- 选择哪些工作,当一个任务槽可用运行
选择要运行的作业,调度跟踪一个的赤字为每个作业,这是计算时间的工作应该得到一个理想的调度量,它实际上得到的计算时间值之间的差额。这是作业的情况怎么样“不公平”是一个衡量。每隔几百毫秒,调度器更新每个职位的通过看多少任务,每个任务这个区间与其公平份额中已经运行了赤字。每当一个任务插槽可用时,它被分配到最高赤字的工作。有一个例外:如果一个或多个作业都不能满足他们的池容量的保证,调度程序选择中,只有这些“贫困”的工作,根据他们的赤字,以确保调度,尽快满足池担保。
公允股份由按照“权重”为每个作业划分集群的可运行的作业间的容量计算。默认情况下,权重是基于优先级的,具有2倍更高的权重的优先级的每一级比下。(例如,VERY_HIGH具有4倍师大的重量。)然而,权重也可以根据工作的大小和年龄,如节中所述#配置公平调度。对于那些在池中的工作,公平的份额也考虑到该池的最低保证。这种能力是按照权重该组的作业之间进行分配。
当在用户的运行作业或池的运行作业的限制很到位,调度器选择其中的工作获得通过排序的所有作业运行,首先在优先顺序,及第二位的提交时间,因为在标准的Hadoop调度。在这个顺序的用户/池的限制后,落在任何作业正在排队等待空闲状态,直到它们可以运行。在此期间,他们从公平共享计算忽略不获得或失去的赤字(即其公平份额设置为零)。