在使用 jar 选项时将作业提交到不同的公平调度程序池

Posted

技术标签:

【中文标题】在使用 jar 选项时将作业提交到不同的公平调度程序池【英文标题】:Submitting jobs to different fair scheduler pools while using jar option 【发布时间】:2012-11-12 18:49:10 【问题描述】:

我对 Hadoop 比较陌生,并且尝试使用 hadoop jar 选项在运行时将同一用户的不同作业提交到公平调度程序的不同池。

基于http://osdir.com/ml/hive-user-hadoop-apache/2009-03/msg00162.html 中的解决方案,我在运行作业时使用了-D 选项。

具体来说,我运行了命令:bin/hadoop jar hadoop-examples-1.0.4.jar grep input output 'dfs[a-z.]+' -D pool.name=sample_pool

我可以在作业跟踪器调度程序页面中看到池,但作业仍提交到用户池。我发现 jar 选项不支持-D 选项:http://hadoop.apache.org/docs/r1.0.4/commands_manual.html#job。

如何在运行时指定它?

【问题讨论】:

【参考方案1】:

几个建议:

自从您做出第一个链接中建议的更改后,您是否重新启动了作业跟踪器?

您之前需要在其他参数之前设置所有 -D 属性(我不确定这在最近的版本中是否已更改)。试试:

bin/hadoop jar hadoop-examples-1.0.4.jar -Dpool.name=sample_pool grep input output 'dfs[a-z.]+'

如果可能没关系,但我总是把-Dkey=value options 放在一起(-Dkey=value 之间没有空格),我发现这更明显地表明这不是变量 args 的一部分列表。

验证已正确获取此信息的一种方法是检查作业跟踪器中的作业 job.xml - 是否列出了 pool.name 属性,是否具有您配置的值。

编辑只是阅读示例是如何捆绑的,您需要在程序名称之后和其他参数之前添加 -D:

`bin/hadoop jar hadoop-examples-1.0.4.jar grep -Dpool.name=sample_pool input output 'dfs[a-z.]+' `

【讨论】:

【参考方案2】:

我觉得你可以指定参数mapred.fairscheduler.pool或者mapred.fairscheduler.poolnameproperty

例如,你可以运行命令

bin/hadoop jar hadoop-examples-1.0.4.jar -Dmapred.fairscheduler.pool=sample_pool grep input output 'dfs[a-z.]+'

ma​​pred.fairscheduler.pool:

指定作业所属的池。如果指定,则忽略 mapred.fairscheduler.poolnameproperty。

ma​​pred.fairscheduler.poolnameproperty:

指定使用哪个jobconf属性来确定作业所属的池。字符串,默认值:user.name(即每个用户一个池)。另一个有用的值是 mapred.job.queue.name 使用 MapReduce 的“队列”系统来访问控制列表(见下文)。 mapred.fairscheduler.poolnameproperty 仅用于未明确设置 mapred.fairscheduler.pool 的作业。

参考文献: hadoop fair scheduler

【讨论】:

以上是关于在使用 jar 选项时将作业提交到不同的公平调度程序池的主要内容,如果未能解决你的问题,请参考以下文章

spark-任务提交多个jar包问题(Oozie调度)

ETL作业调度软件TASKCTL4.1怎么安装?

操作系统_第三章处理器管理_批处理作业的调度算法

在 Linux 调度器中,包含多个线程的不同进程如何获得公平的时间配额?

如何通过在 Apache Flink 中使用上传的 jar 来提交作业?

第三章 进程调度的几种方式