16-天亮大数据经典大数据笔试题系列之mr wordcount代码实现

  • 题目:mapreduce wordcount代码实现
    • 考点分析:
      1)wordcount经典java实现
    • 考官意图:
      1)是不是真正理解经典的MapReduce计算过程
  • 代码实现:
package com.tianliangedu.driver;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import com.tianliangedu.mapper.MyTokenizerMapper;
import com.tianliangedu.reducer.IntSumReducer;

public class WordCount {
	// 启动mr的driver方法
	public static void main(String[] args) throws Exception {
		// 得到集群配置参数
		Configuration conf = new Configuration();
		// 设置到本次的job实例中
		Job job = Job.getInstance(conf, "天亮WordCount");
		// 指定本次执行的主类是WordCount
		job.setJarByClass(WordCount.class);
		// 指定map类
		job.setMapperClass(MyTokenizerMapper.class);
		// 指定combiner类,要么不指定,如果指定,一般与reducer类相同
		job.setCombinerClass(IntSumReducer.class);
		// 指定reducer类
		job.setReducerClass(IntSumReducer.class);
		// 指定job输出的key和value的类型,如果map和reduce输出类型不完全相同,需要重新设置map的output的key和value的class类型
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		// 指定输入数据的路径
		FileInputFormat.addInputPath(job, new Path(args[0]));
		// 指定输出路径,并要求该输出路径一定是不存在的
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		// 指定job执行模式,等待任务执行完成后,提交任务的客户端才会退出!
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

package com.tianliangedu.mapper;

import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MyTokenizerMapper extends
        Mapper<Object, Text, Text, IntWritable> {
    // 暂存每个传过来的词频计数,均为1,省掉重复申请空间
    private final static IntWritable one = new IntWritable(1);
    // 暂存每个传过来的词的值,省掉重复申请空间
    private Text word = new Text();
    // 核心map方法的具体实现,逐个<key,value>对去处理
    public void map(Object key, Text value, Context context)
            throws IOException, InterruptedException {
        // 用每行的字符串值初始化StringTokenizer
        StringTokenizer itr = new StringTokenizer(value.toString());
        // 循环取得每个空白符分隔出来的每个元素
        while (itr.hasMoreTokens()) {
            // 将取得出的每个元素放到word Text对象中
            word.set(itr.nextToken());
            // 通过context对象,将map的输出逐个输出
            context.write(word, one);
        }
    }
}

package com.tianliangedu.reducer;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
//reduce类,实现reduce函数
public class IntSumReducer extends
                Reducer<Text, IntWritable, Text, IntWritable> {
         private IntWritable result = new IntWritable();
         //核心reduce方法的具体实现,逐个<key,List(v1,v2)>去处理
         public void reduce(Text key, Iterable<IntWritable> values,
                      Context context) throws IOException, InterruptedException {
                //暂存每个key组中计算总和
                int sum = 0;
                //加强型for,依次获取迭代器中的每个元素值,即为一个一个的词频数值
                for (IntWritable val : values) {
                      //将key组中的每个词频数值sum到一起
                      sum += val.get();
                }
                //将该key组sum完成的值放到result IntWritable中,使可以序列化输出
                result.set(sum);
                //将计算结果逐条输出
                context.write(key, result);
         }
   }



天亮教育是一家从事大数据云计算、人工智能、教育培训、产品开发、咨询服务、人才优选为一体的综合型互联网科技公司。
公司由一批BAT等一线互联网IT精英人士创建,
以"快乐工作,认真生活,打造IT职业技能教育的一面旗帜"为愿景,胸怀"让天下没有难找的工作"使命,
坚持"客户第一、诚信、激情、拥抱变化"的价值观,
全心全意为学员赋能提效,践行技术改变命运的初心。

更多学习讨论, 请加入
官方-天亮大数据交流-366784928
群二维码:
这里写图片描述
官方-天亮web前端交流-972788995
群二维码:
在这里插入图片描述

欢迎关注天亮教育公众号,大数据技术资料与课程、招生就业动态、教育资讯动态、创业历程分享一站式分享,官方微信公众号二维码:
在这里插入图片描述

天亮教育大数据官方群318971238,
天亮教育web前端官方群318971238,
爬虫、nlp技术qq群320349384
hadoop & spark & hive技术群297585251
教育培训官网:http://myhope365.com
项目研发业务尚云科技官网:http://shangyuninfo.com/
天亮教育公开课-从小白到大佬修成记-全系列视频地址:http://myhope365.com/news/index?id=66

猜你喜欢

转载自blog.csdn.net/erliang20088/article/details/89946712
今日推荐