如何在Hadoop MapReduce中查看日志和Sysout

时间:2020-01-09 10:34:34  来源:igfitidea点击:

在编写程序时,为了进行调试,我们确实放置了一些日志或者system.out来显示消息。我们还可以在MapReduce程序中使用记录器或者sysouts进行调试。在本文中,我们将介绍如何在Hadoop MR2中访问这些日志或者system.out.print消息。

如何在MapReduce2中查看日志消息

当然,第一件事就是将日志放入代码中。然后,在运行MapReduce作业时,我们可以从控制台记录该作业的application_id。运行MapReduce作业后,将在控制台上显示如下一行,显示应用程序ID。

18/06/13 15:20:59 INFO impl.YarnClientImpl: Submitted application application_1528883210739_0001

使用相同的application_id,将在HADOOP_INSTALLATION_DIR / logs / userlogs /位置创建一个文件夹,我们将在其中找到包含映射器和化简器日志的文件夹。在这些文件夹中,我们可以检查stdout文件中是否有system.out.print和syslog日志消息。

示例MapReduce显示如何放置日志

我们可以使用Hadoop捆绑包随附的Apache Commons日志记录来进行记录。这是一个简单的单词计数MapReduce程序,其中包含一些log.info和sysout消息。

import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount{
  public static final Log log = LogFactory.getLog(WordCount.class);
  // Map function
  public static class WordMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
				
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    public void map(LongWritable key, Text value, Context context) 
        throws IOException, InterruptedException {
      log.info("in map method");
      // Splitting the line on spaces
      String[] stringArr = value.toString().split("\s+");
      for (String str : stringArr) {
        word.set(str);
        System.out.println("word -- " + word.toString());
        context.write(word, one);
      }	 
    }
  }
	
  // Reduce function
  public static class CountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{		   
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable values, Context context) 
        throws IOException, InterruptedException {
      log.info("in reducer ");
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      log.info(key + " -- Sum is --- " + sum);
      result.set(sum);
      context.write(key, result);
    }
  }
	
  public static void main(String[] args) throws Exception{
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(WordMapper.class);  
    //job.setNumReduceTasks(0);
    job.setReducerClass(CountReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
  
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

运行它并知道应用程序ID后,只需转到该位置并检查stdout和syslog文件。

作为示例,运行此代码后,我可以在路径-HADOOP_INSTALLATION_DIR / logs / userlogs / application_1528883210739_0001 / container_1528883210739_0001_01_000002 / stdout中访问标准输出,并在其中查看我的sysouts-

word -- This
word -- is
word -- a
word -- test
word -- file.
word -- This
word -- is
word -- a
word -- Hadoop
word -- MapReduce
word -- program
word – file.

或者,我可以在路径HADOOP_INSTALLATION_DIR / logs / userlogs / application_1528883210739_0001 / container_1528883210739_0001_01_000003 / syslog中访问syslog,并查看减速器的记录器。

2018-06-13 15:21:15,321 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,321 INFO [main] org.theitroad.WordCount$WordMapper: Hadoop -- Sum is --- 1
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: MapReduce -- Sum is --- 1
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: This -- Sum is --- 2
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: a -- Sum is --- 2
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: file. -- Sum is --- 2
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: is -- Sum is --- 2
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,322 INFO [main] org.theitroad.WordCount$WordMapper: program -- Sum is --- 1
2018-06-13 15:21:15,323 INFO [main] org.theitroad.WordCount$WordMapper: in reducer 
2018-06-13 15:21:15,323 INFO [main] org.theitroad.WordCount$WordMapper: test -- Sum is --- 1