【问题标题】:Report job status/progress in close() method在 close() 方法中报告作业状态/进度
【发布时间】:2017-09-07 07:03:22
【问题描述】:

我在 hadoop 中遇到了超时问题,我的工作被杀死了。 close() 方法中有一项繁重的清理工作,因此在进行这些清理时,我需要更新 close 方法中的进度。

对于这种情况,增加超时不是一个好的选择,因为它无法随着清理工作量的增加而扩展。

我正在查看的遗留作业是使用旧 API,它在 reduce() 方法中有一个报告器对象,可用于更新进度。但是,close() 方法中没有这样的 Reporter。那么有什么解决办法吗?

【问题讨论】:

    标签: hadoop distributed-computing


    【解决方案1】:

    尝试使用Mapper.Context

    Hadoop 提供了 Prograssable 接口,其中包含这个有趣的方法Public void Progress()。 Context 类实现了这个接口,所以任何 mapper 或 reducer 都可以调用:

    context.progress()
    

    表明它是活着的并继续处理。


    作为最后的手段,既然您确信这不是一个好的选择,您可以增加该配置属性:

    <property>
      <name>mapreduce.task.timeout</name>
      <value>2000000</value>
    </property>
    

    在“mapred-site.xml”中。

    或在您的代码中执行此操作:

    Configuration conf = new Configuration();
    long milliSeconds = 2000 * 60 * 60;
    conf.setLong("mapreduce.task.timeout", milliSeconds);
    

    此属性的值越高,对您的情况越好。默认值为 600000。

    【讨论】:

    • 旧 API 中的一个类似类称为 Reporter。但它没有传递到 reducer 中的 close() 方法中。记者在减速机的生命周期内是单身人士吗?如果是,我可以将其分配给对象级字段并稍后用于报告进度吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多