当前位置: 首页 > 面试题库 >

无法报告状态600秒钟。杀人!报告Hadoop的进度

阙繁
2023-03-14
问题内容

我收到以下错误:

Task attempt_201304161625_0028_m_000000_0 failed to report status for 600 seconds. Killing!

我的地图工作。但是, 我不想增加hadoop杀死不报告进度的任务之前的默认时间 ,即

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

相反,我想无论是使用定期汇报工作进度context.progress()context.setStatus("Some Message")或者context.getCounter(SOME_ENUM.PROGRESS).increment(1)或者类似的东西。但是,这仍然导致该作业被杀死。这是我尝试报告进度的代码段。映射器:

protected void map(Key key, Value value, Context context) throws IOException, InterruptedException {

    //do some things
    Optimiser optimiser = new Optimiser();
    optimiser.optimiseFurther(<some parameters>, context);
    //more things
    context.write(newKey, newValue);
}

Optimiser类中的optimiseFurther方法:

public void optimiseFurther(<Some parameters>, TaskAttemptContext context) {

    int count = 0;
    while(something is true) {
        //optimise

        //try to report progress
        context.setStatus("Progressing:" + count);
        System.out.println("Optimise Progress:" + context.getStatus());
        context.progress();
        count++;
    }
}

映射器的输出显示状态正在更新:

Optimise Progress:Progressing:0
Optimise Progress:Progressing:1
Optimise Progress:Progressing:2
...

但是,在默认时间后,该作业仍被终止。我是否以错误的方式使用上下文?为了成功报告进度,我需要在作业设置中做其他事情吗?


问题答案:

这个问题是一个做错误Hadoop中0.20由此将调用context.setStatus()context.progress()不被报告给底层框架(电话设置不同的柜台不工作要么)。有可用的补丁程序,因此更新到较新版本的Hadoop应该可以解决此问题。



 类似资料:
  • 我是BIRT的新手,今天已经为Java和报表开发人员下载了Eclipse IDE。 在完成了一个教程之后,当我准备好预览我的报告时,我点击了“在Web Viewer上查看报告”和许多其他选项,但它总是为我启动Notepad+。 我的IDE有问题吗? 请指教。谢谢你抽出时间。 注意到错误日志中有一些错误,不确定这是否会影响报表的预览: java.lang.NullPointerException

  • 我正在从. jasper文件加载jasper报告文件以提高性能,如下所示。 但是我现在有一个要求,动态形成的查询必须设置为. jasper(编译)文件。有没有办法做同样的事情?

  • 在一个配置了多个应用项目和多个 Library 项目的多项目里,当同时运行所有测试的时候,测试结果整合到一份测试报告中可能是非常有用的。 为了实现这个目的,需要在同一个配置中添加另一个插件。可以通过以下方式添加: buildscript { repositories { jcenter() } dependencies { classpath

  • 22.13.7.1.TestNG 的参数化方法和报告 TestNG支持参数化方法,允许一个特定的测试方法使用不同的输入被执行多次。Gradle会在测试报告中包含该方法的参数值. 给出一个叫aTestMethod的测试方法,该方法有两个参数,在测试报告中会根据名字报告:aTestMethod(toStringValueOfParam1, toStringValueOfParam2). 这很容易识别的

  • 在调试模式下运行服务器时,我会在下面发布错误日志。请帮我理解这份报告

  • 上面的代码用于生成allure报告并运行测试,它运行并生成reports-allure-results中的一个文件夹,其中包含JSON文件。见下方截图