手写WordCount示例编写

简介: 手写WordCount示例编写

手写WordCount示例编写

需求:在给定的文本文件中统计输出每一个单词出现的总次数

数据格式准备如下:

cd /export/servers
vim wordcount.txt
hello,world,hadoop
hive,sqoop,flume,hello
kitty,tom,jerry,world
hadoop
hdfs dfs -mkdir /wordcount/
hdfs dfs -put wordcount.txt /wordcount/

定义一个mapper类

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<LongWritable,Text,Text,LongWritable> {
    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String line = value.toString();
        String[] split = line.split(",");
        for (String word : split) {
            context.write(new Text(word),new LongWritable(1));
        }
    }
}

定义一个reducer类

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCountReducer extends Reducer<Text,LongWritable,Text,LongWritable> {
    /**
     * 自定义reduce逻辑
     * 所有的key都是单词,所有的values都是单词出现的次数
     * @param key
     * @param values
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        long count = 0;
        for (LongWritable value : values) {
            count += value.get();
        }
        context.write(key,new LongWritable(count));
    }
}

定义一个主类,用来描述job并提交job

public class JobMain extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
    Job job = Job.getInstance(super.getConf(), JobMain.class.getSimpleName());
    //打包到集群上面运行时候,必须要添加以下配置,指定程序的main函数
    job.setJarByClass(JobMain.class);
    //第一步:读取输入文件解析成key,value对
    job.setInputFormatClass(TextInputFormat.class);
    TextInputFormat.addInputPath(job,new Path("hdfs://192.168.100.129:8020/wordcount"));
    //第二步:设置mapper类
    job.setMapperClass(WordCountMapper.class);
    //设置map阶段完成之后的输出类型
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(LongWritable.class);
    //第三步,第四步,第五步,第六步,省略
    //第七步:设置reduce类
    job.setReducerClass(WordCountReducer.class);
    //设置reduce阶段完成之后的输出类型
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(LongWritable.class);
    //第八步:设置输出类以及输出路径
    job.setOutputFormatClass(TextOutputFormat.class);
    TextOutputFormat.setOutputPath(job,new Path("hdfs://192.168.100.129:8020/wordcount_out"));
    boolean b = job.waitForCompletion(true);
    return b?0:1;
}
/**
 * 程序main函数的入口类
 * @param args
 * @throws Exception
 */
public static void main(String[] args) throws Exception {
    Configuration configuration = new Configuration();
    Tool tool  =  new JobMain();
    int run = ToolRunner.run(configuration, tool, args);
    System.exit(run);
}

}

代码编写完毕后将代码打成jar包放到服务器上面去运行,实际工作当中,都是将代码打成jar包,开发main方法作为程序的入口,然后放到集群上面去运行

运行命令

hadoop jar hadoop_hdfs_operate-1.0-SNAPSHOT.jar cn.itcast.hdfs.demo1.JobMain

纯手写代码时出现Bug:

1.

运行集群并未报错,

开启JobHistory,打开浏览器19888页面找报错


目录
相关文章
|
存储 JSON Go
如何在 Go 项目中隐藏敏感信息,比如避免暴露用户密码?
在Go语言开发中,用户信息管理常涉及敏感数据如密码的处理。为防止这些数据暴露给客户端,本文介绍了三种方法:使用JSON标签忽略字段、自定义序列化逻辑、使用数据传输对象(DTO),以确保用户数据的安全性。通过这些方法,可以有效控制数据输出,避免敏感信息泄露。
277 1
|
Linux
【专栏】Linux系统中"cd"命令的使用技巧,包括基本用法
【4月更文挑战第28天】本文介绍了Linux系统中"cd"命令的使用技巧,包括基本用法(如切换到指定目录)、利用"."和".."、"~"符号,以及绝对路径和相对路径切换。还分享了高级技巧,如使用通配符、结合其他命令和在脚本中的应用。通过学习这些技巧,可提升工作效率,如快速切换到项目目录或最近使用的目录。
780 0
|
Windows
DataGridView 中合并单元格
Windows Forms DataGridView 没有提供合并单元格的功能,要实现合并单元格的功能就要在CellPainting事件中使用Graphics.DrawLine和 Graphics.DrawString 自己来“画”。
1142 0
|
4天前
|
云安全 人工智能 自然语言处理
|
8天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
802 17
|
11天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
805 59
Meta SAM3开源:让图像分割,听懂你的话
|
2天前
|
人工智能 安全 小程序
阿里云无影云电脑是什么?最新收费价格个人版、企业版和商业版无影云电脑收费价格
阿里云无影云电脑是运行在云端的虚拟电脑,分企业版和个人版。企业版适用于办公、设计等场景,4核8G配置低至199元/年;个人版适合游戏、娱乐,黄金款14元/月起。支持多端接入,灵活按需使用。
237 164