java - Hadoop 作业调度以及 0.20.203 中映射器较慢的作业

标签 java hadoop job-scheduling mapper

我正在管理一个由多个用户共享的 Hadoop 集群。我们经常使用极慢的映射器运行作业。例如,我们可能有一个 32 GB 的句子文件(每行一个句子),我们想要对其进行 NLP 解析(比如每个句子需要 100 毫秒)。如果 block 大小为 128 MB,则为 250 个映射器。这会填满我们相当小的集群(9 个节点乘以每个节点 12 个映射器是 108 个映射器),但每个映射器需要很长时间才能完成(数小时)。

问题是如果集群是空的并且启动了这样的作业,它会使用集群上的所有映射器。然后,如果其他人想要做一份空头工作,它就会被封锁数小时。我知道较新版本的 Hadoop 支持 Fair Scheduler 中的抢占(我们正在使用 Capacity Scheduler),但较新版本也不稳定(我正在焦急地等待下一个版本)。

以前有specifying the number of mappers的选项但是现在JobConf已弃用(奇怪的是,它是 not deprecated in 0.20.205 )。这将缓解这个问题,因为有了更多的映射器,每个映射任务将在更小的数据集上工作,从而更快地完成。

在 0.20.203 中有解决这个问题的方法吗?我是否需要继承我的 InputFormat(在本例中为 TextInputFormat)?如果是这样,我到底需要指定什么?

最佳答案

我相信您应该能够增加这些文件的 block 大小:如果您这样做,那么您的应用程序自然会使用更少的映射器。

还请记住,作业配置中有 map.input.length 参数。这会增加拆分,因此您实际上拥有更少的映射器和更大的输入。

关于java - Hadoop 作业调度以及 0.20.203 中映射器较慢的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8156316/

相关文章:

java - 在未处理的异常期间,JVM 会发出什么信号?

Java 正则表达式不区分大小写不起作用

hadoop - 从 oozie 的网络用户界面中删除作业?

hadoop - pig 错误 0 : Scalar has more than one row in the output

spring - 如何获取Spring调度下一次运行时间?

java - 排队顺序 UI 作业并在 UI 中显示它们

java - 如果我在实例方法中放置静态锁会发生什么?

java - 从 ArrayList 中删除元素

java - 获取 E0902 : Exception occured:[Server IPC version 9 cannot communicate with client version 4]

ruby - sleep() 对于作业调度应用程序的主循环来说是个好主意吗