配置MapReduce的历史服务器查看MR运行日志

配置MapReduce的历史服务器查看MR运行日志

前言

前面介绍的MapReduce实例,我们会发现无法查看Map函数和Reduce函数的具体执行过程。本文介绍如何配置历史服务器来查看MR的运行日志。

一、如果我们仅仅在map和reduce的函数中加入以下代码去查看执行过程,会发现日志文件中并没有输出我们所希望的数据

map函数

 package com.sun.wordcount;

//map阶段 (部分计算)
// hadoop包装了基本类型
// int->intWritable Long->LongWritable
// Double->DoubleWritable
// Float->FloatWritable String->Text

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.log4j.Logger;

import java.io.IOException;

//泛型1:keyin inputFormat中的输出key类型  泛型2:valuein inputFormat中的输出value类型
//泛型3:keyout map阶段中的输出key类型  泛型2:valueout map阶段中的输出value类型
public class WordCountMap extends Mapper {

    private Logger logger=Logger.getLogger(WordCountMap.class);

    //input format 输出一次,调用一次map方法;
    // 参数key是本次input format输出这行数据的行首偏移量
    // 参数value是当前input format输出的这行值
    @Override //打开重写方法的快捷键(Ctrl+o)
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        logger.info("map--->keyin:"+key);
        logger.info("map--->valuein:"+value);
        //对读取的行数据进行切分
        String[] words = value.toString().split(" ");
        for (String s : words) {
            context.write(new Text(s),new IntWritable(1));
            logger.info("map--->keyout:"+s);
            logger.info("map--->valueout:"+new IntWritable(1));
        }
    }
}

reduce函数

package com.sun.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.log4j.Logger;

import java.io.IOException;

//reduce阶段(汇总计算)
public class WordCountReduce extends Reducer
{
    Logger logger =Logger.getLogger(WordCountReduce.class);
    //所有map执行完,执行Reduce阶段
    @Override
    protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {

        logger.info("map--->keyin:"+key);
        logger.info("map--->valuein:"+values);

        int sum=0;
        for (IntWritable value : values) {
            sum+=value.get();
        }
        //输出结果
        context.write(key,new IntWritable(sum));
        logger.info("map--->keyout:"+key);
        logger.info("map--->valueout:"+new IntWritable(sum));
    }
}

其实,思考一下也可以理解了,因为map和reduce函数是在很多台机器上执行,那么仅仅通过以上代码,结果只会输出到map函数当时执行的机器上。所以,我们在其他机器上就看不到输出结果。

二、因此hadoop引入了历史服务器,它不仅可以记录mapreduce的日志,同时会将各个机器节点上的日子整合到同一台历史服务器上。

三、配置历史服务器

1、在mapred-site.xml增加如下配置



  mapreduce.jobhistory.address
  hadoop5:10020




  mapreduce.jobhistory.webapp.address
  hadoop5:19888
  MapReduce JobHistory Server Web UI host:port


2、在yarn-site.xml增加如下配置


  
    yarn.log-aggregation-enable
    true
  

 
  
    How long to keep aggregation logs before deleting them.  -1 disables. 
    Be careful set this too small and you will spam the name node.
    yarn.log-aggregation.retain-seconds
    604800
   

四、启动历史服务器

和启动yarn集群一样,启动历史服务器在充当历史服务器的节点上启动

mr-jobhistory-daemon.sh start historyserver

五、查看历史服务器上MR日志

浏览器的地址是:历史服务器IP:19888
配置MapReduce的历史服务器查看MR运行日志_第1张图片
配置MapReduce的历史服务器查看MR运行日志_第2张图片
配置MapReduce的历史服务器查看MR运行日志_第3张图片
配置MapReduce的历史服务器查看MR运行日志_第4张图片
配置MapReduce的历史服务器查看MR运行日志_第5张图片

你可能感兴趣的:(大数据,hadoop,mapreduce,历史服务器,mapreduce运行日志)