Hadoop 映射错误-尝试xxxx在600秒后超时

Hadoop 映射错误-尝试xxxx在600秒后超时,hadoop,map,mapreduce,timeout,elastic-map-reduce,Hadoop,Map,Mapreduce,Timeout,Elastic Map Reduce,我使用的是Hadoop 2.2.0,在运行映射任务时,出现以下错误 尝试在1800000秒后超时 (它是1800000,因为我更改了mapreduce.task.timeout的配置) 以下是我的地图代码: public class MapTask { ContentOfFiles fileContent= new ContentOfFiles(); @Override public void map(LongWritable key, Text value, Context contex

我使用的是Hadoop 2.2.0,在运行映射任务时,出现以下错误

尝试在1800000秒后超时

(它是1800000,因为我更改了mapreduce.task.timeout的配置)

以下是我的地图代码:

public class MapTask
{
 ContentOfFiles fileContent= new ContentOfFiles();
 @Override
 public void map(LongWritable key, Text value, Context context)
 {
   String line = value.toString(); 
   String splits[] = line.split("\\t");
   List<String> sourceList = Arrays.aslist(splits);
   String finalOutput = fileContent.getContentOfFile(sourceList);
   context.write(NullWritable.get, new Text(finalOutput));  
 }
}
公共类映射任务
{
ContentOfFiles fileContent=新ContentOfFiles();
@凌驾
公共void映射(可长写键、文本值、上下文)
{
字符串行=value.toString();
字符串拆分[]=line.split(\\t”);
List sourceList=Arrays.aslist(拆分);
字符串finalOutput=fileContent.getContentOfFile(sourceList);
write(nullwriteable.get,新文本(finalOutput));
}
}
这是我的ContentOfFiles课程

public class ContentOFFiles
{
  public String getContentOfFile(List<String>sourceList)
   {
     String returnContentOfFile;
     for(List sourceList:sourceLists)
      {
        //Open the files and get the content and then append it to the String returnContentOfFile
      }
    return returnContentOfFile;
   }
}
公共类ContentOFFiles
{
公共字符串getContentOfFile(ListsourceList)
{
字符串returnContentOfFile;
对于(列表源列表:源列表)
{
//打开文件并获取内容,然后将其附加到字符串returnContentOfFile
}
返回内容文件;
}
}
当我运行映射任务时,我得到一个错误消息

尝试在1800000秒后超时

我想知道的是,我如何告诉hadoop我的任务仍在运行

我在地图中调用ContentOfFiles类。那么有没有办法告诉我的地图任务仍在运行。我已尝试将配置mapreduce.task.timeout更改为1800000,但仍然会出现相同的错误


我再次使用Hadoop2.2,如果有人能告诉我如何在新的api中处理这个问题,那就太好了

您可以尝试添加
context.progress()在mapper中的每个长操作结束后。据我所知,对于
循环,最好的地方是
结束:

public String getContentOfFile(List < String > sourceList, Context context) {
    String returnContentOfFile;
    for (List sourceList: sourceLists) {
        //Open the files and get the content and then append it to the String returnContentOfFile
        context.progres(); // report on progress
    }
    return returnContentOfFile;
}
公共字符串getContentOfFile(列表sourceList,上下文){
字符串returnContentOfFile;
对于(列表源列表:源列表){
//打开文件并获取内容,然后将其附加到字符串returnContentOfFile
context.progres();//进度报告
}
返回内容文件;
}

您是否尝试使用
context.progress()报告映射程序仍在工作?我应该在context.write之前还是之后添加它??