配置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<LongWritable, Text,Text, IntWritable> {

    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<Text, IntWritable,Text,IntWritable>
{
    Logger logger =Logger.getLogger(WordCountReduce.class);
    //所有map执行完,执行Reduce阶段
    @Override
    protected void reduce(Text key, Iterable<IntWritable> 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增加如下配置

<!--指定哪台机器是充当历史服务器-->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>hadoop5:10020</value>
</property>

<!--指定历史服务器的浏览界面-->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>hadoop5:19888</value>
  <description>MapReduce JobHistory Server Web UI host:port</description>
</property>

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

<!--开启日志聚合-->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

 <!--日志保存时间设置为7天-->
  <property>
    <description>How long to keep aggregation logs before deleting them.  -1 disables. 
    Be careful set this too small and you will spam the name node.</description>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property> 

四、启动历史服务器

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

mr-jobhistory-daemon.sh start historyserver

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

浏览器的地址是:历史服务器IP:19888
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mekeater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值