【问题标题】:how to change the task status into failed in hadoop mapreduce on exception如何在异常的hadoop mapreduce中将任务状态更改为失败
【发布时间】:2013-12-02 08:30:07
【问题描述】:

我正在使用 hadoop mapreduce 来完成以下任务:

我的映射器将从 HDFS 读取 .xml 文件并将其传递给某个服务。我的setup() 中有这样的代码:

try
{
    System.out.println(propertyName);
    session = FindPath.createSession("localhost",3250, EncodingConstants.en_ISO_8859_1);
    session.open();
}
catch 
{
    System.out.println("error");
}

当datanode没有FindPath [ FindPath - service is not yet started ] 时会抛出异常。

现在我的问题是我的映射程序没有移动到另一个正在运行 FindPath 服务的集群。

示例:

Datanode 1 Datanode 2 - 两个数据节点

如果 DataNode 1 尚未启动 FindPath 服务,则 Input 应移动到 Datanode 2。

我怎样才能做到这一点?

当Datanode 1 中的TaskStatus 抛出异常时,如何将其更改为“失败”?

更新

Job j;
catch(Exception Ex)
{   
    j.failTask((TaskAttemptID)context.getTaskAttemptID());
    System.out.println("error");
}

我使用过类似的东西,但它会引发 NullPointer 异常。

如何在我的映射器或映射器设置新 API 中使用failTask?

【问题讨论】:

  • 那么,您想使地图失效并在您提供服务的其他节点中使用不同的地图重新处理数据?
  • @SSaikia_JtheRocker 是的。我想这样做
  • @SSaikia_JtheRocker 我正在使用新的 API

标签: java exception hadoop mapreduce


【解决方案1】:

使用JobClient 访问RunningJob 类(我有1.0.4 API)。

所以代码看起来像这样:

在您的setup() 中有一个JobClient 和一个RunningJobreference。

方法如下:

public void setup(Context context)
{
    JobClient jobClient;
    RunningJob runningJob;

    try 
    {
        jobClient = new JobClient((JobConf)context.getConfiguration());
        runningJob = jobClient.getJob((JobID)(context.getJobId()); //mapred.JobID!
    }
    catch (IOException e)
    {
        System.out.println("IO Exception");
    }


    try
    {
        System.out.println(propertyName);
        session = FindPath.createSession("localhost",3250, EncodingConstants.en_ISO_8859_1);
        session.open();
    }
    catch 
    {
        System.out.println("error");
        runningJob.killTask((TaskAttemptID)context.getTaskAttemptID(), true);// cast as mapred.TaskAttemptID
    }

}

这会导致 TaskAttempt 失败。

最后,您可能应该将 mapred.map.max.attempts 设置为 1,这样失败的 taskAttempt 就是失败的任务。

注意:

您应该考虑更改 mapred.max.map.failures.percent,因为它反映了您的集群对失败任务的容忍度。

【讨论】:

  • 已编辑,因为我没有注意到您需要在 setup 而不是 map 中失败任务。
  • 您能说出确切的版本吗(我对许多不同的 API 感到困惑 :))?
  • 我正在使用 Job 和 mapreduce 。 V-1.2.
  • @Backtrack 好吧,我也是,但在 1.0.4 中。但是在您的任务中使用JobClient 并在您的驱动程序中保留Job 仍然没有限制。当然,除非我错过了什么。
  • 好的...我现在将异常发布..然后对您理解很有用
猜你喜欢
  • 2016-04-14
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多