2014-09-22 2 views
2

Я хочу использовать HPROF для профилирования моей работы Hadoop. Проблема в том, что я получаю TRACES, но нет CPU SAMPLES в файле profile.out. Код, который я использую в моем методе выполнения является:Hadoop HPROF профилирование нет CPU SAMPLES написано

/** Get configuration */ 
    Configuration conf = getConf(); 
    conf.set("textinputformat.record.delimiter","\n\n"); 
    conf.setStrings("args", args); 

    /** JVM PROFILING */ 
    conf.setBoolean("mapreduce.task.profile", true); 
    conf.set("mapreduce.task.profile.params", "-agentlib:hprof=cpu=samples," + 
     "heap=sites,depth=6,force=n,thread=y,verbose=n,file=%s"); 
    conf.set("mapreduce.task.profile.maps", "0-2"); 
    conf.set("mapreduce.task.profile.reduces", ""); 

    /** Job configuration */ 
    Job job = new Job(conf, "HadoopSearch"); 
    job.setJarByClass(Search.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(NullWritable.class); 

    /** Set Mapper and Reducer, use identity reducer*/ 
    job.setMapperClass(Map.class); 
    job.setReducerClass(Reducer.class); 

    /** Set input and output formats */ 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 

    /** Set input and output path */ 
    FileInputFormat.addInputPath(job, new Path("/user/niko/16M")); 
    FileOutputFormat.setOutputPath(job, new Path(cmd.getOptionValue("output"))); 

    job.waitForCompletion(true); 

    return 0; 

Как получить CPU SAMPLES быть написаны на выходе?

У меня также есть сообщение об ошибке trange на stderr, но я думаю, что это не связано, так как оно присутствует также, когда профилирование установлено в false или код для включения профилирования закомментирован. Ошибка

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.impl.MetricsSystemImpl). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

ответ

2

Пряжа (или MRv1) убивает контейнер сразу после окончания вашей работы. Образцы CPU не могут быть записаны в файл профилирования. На самом деле, ваши следы также должны быть усечены.

Вы должны добавить опцию folowwing (или эквивалент по версии Hadoop):

yarn.nodemanager.sleep-delay-before-sigkill.ms = 30000 
# No. of ms to wait between sending a SIGTERM and SIGKILL to a container 

yarn.nodemanager.process-kill-wait.ms = 30000 
# Max time to wait for a process to come up when trying to cleanup a container 

mapreduce.tasktracker.tasks.sleeptimebeforesigkill = 30000 
# Same en MRv1 ? 

(30 сек, кажется, достаточно)

+0

работал как шарм. –

0

Это, вероятно, вызвано https://issues.apache.org/jira/browse/MAPREDUCE-5465, закрепленное в более новые версии Hadoop.

Так решения кажутся:

  • настройки использования упомянутых в ответе ALSimon, либо
  • обновление до Hadoop> = 2.8.0
Смежные вопросы