Hadoop实战 一 WordCount

  • 准备工作
    • 启动虚拟机Hadoop
    • Windows Hadoop 环境配置
    • 准备数据文本
    • 修改Maven pom文件
    • Hadoop配置文件
  • 编码环节
    • Mapper文件
    • Reduce 文件
    • Mian方法
  • 结果

准备工作

这里我们使用 IDEA + Maven 作为演示,做一个简单的单词计数统计

启动虚拟机Hadoop

如何启动以及配置问题见 – Hadoop入门

Windows Hadoop 环境配置

下载 winutils

链接:https://github.com/steveloughran/winutils

配置环境变量

在path里 添加 HADOOP_HOME

准备数据文本

一个非常简单的 txt 文本

修改Maven pom文件

这里我们添加两个依赖 hadoop-common 以及 hadoop-core

     <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>3.3.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs &ndash;&gt;--><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.1</version><scope>test</scope></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-jobclient</artifactId><version>3.3.1</version><scope>provided</scope></dependency>

Hadoop配置文件

将 Hadoop 配置文件 拷贝到Java 工程 resources文件夹下

编码环节

Mapper文件

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;import java.io.IOException;/*** Map阶段 通过继承Mapper类 重写map方法实现* Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> 四个参数解释* KEYIN:K1 一般为 LongWritable,读取文件时为一次读取一行数据,K1为此行开头与文本开头的偏移量 不重要* VALUEIN:V1 行数据* KEYOUT:K2 可自定义 Map处理完成后数据的键的类型* VALUEOUT:V2 可自定义 Map处理完成后数据的value的类型* */public class WcMapper extends Mapper<LongWritable, Text, Text, Text> {@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 结合文本内容 value 应该为: hello world responsibility hello combine google java php python java java javaString[] words = value.toString().split(" ");for (String word : words) {// 将单词作为key 每个单词出现一次 1 作为valuecontext.write(new Text(word), new Text("1"));}}
}

Reduce 文件

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** Reduce阶段 通过继承Reducer类 重写reduce方法实现* Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT> 四个参数解释* KEYIN:K2 Map阶段的KEYOUT* VALUEIN:V2 Map阶段的VALUEOUT* KEYOUT:K3 可自定义 Reducer处理完成后数据的键的类型* VALUEOUT:V3 可自定义 Reducer处理完成后数据的value的类型* */
public class WcReducer extends Reducer<Text, Text, Text, Integer> {@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {// 此时 Hadoop已经将Key相同的数据进行了合并 例: hello <1,1,1>   word <1>int count = 0; //总数for (Text value : values) {count+=Integer.parseInt(value.toString());}context.write(key, count);}
}

Mian方法

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;public class WordCount {public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf,"wordcount");// 读取方式 一般为 TextInputFormatjob.setInputFormatClass(TextInputFormat.class);//设置读取文件路径TextInputFormat.addInputPath(job,new Path("file:///C:\\Users\\Administrator\\Desktop\\Hadoop学习\\words.txt"));//设置Map文件 以及 K2,V2 类型 对应Map文件里的K2,V2job.setMapperClass(WcMapper.class);job.setMapOutputKeyClass(Text.class); // K2job.setMapOutputValueClass(Text.class); // V2//设置Reducer文件 以及 K3,V3 类型 对应Reducer文件里的K3,V3job.setReducerClass(WcReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Integer.class);// 设置输出方式 一般为TextOutputFormat job.setOutputFormatClass(TextOutputFormat.class);//设置输出路径TextOutputFormat.setOutputPath(job,new Path("file:///C:\\Users\\Administrator\\Desktop\\Hadoop学习\\wordCount"));//等待任务结束boolean flag = job.waitForCompletion(true);System.exit(flag?0:1);}
}

结果

part-r-00000 为最后输出的数据

得到预期结果

Hadoop实战 一 WordCount相关推荐

  1. Hadoop实战(6)_搭建Apache Hadoop的Eclipse开发环境

    系列目录: Hadoop实战(1)_阿里云搭建Hadoop2.x的伪分布式环境 Hadoop实战(2)_虚拟机搭建Hadoop的全分布模式 Hadoop实战(3)_虚拟机搭建CDH的全分布模式 Had ...

  2. Hadoop实战之三~ Hello World

    本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾 ...

  3. 【大数据Hadoop实战篇】

    大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...

  4. Hadoop实战篇(1)

    Hadoop实战篇(1) 作者 | WenasWei 前言 在前面介绍过了Hadoop-离线批处理技术的整体架构,接下来便开始学习安装配置并使用 Hadoop ; 将从以下几点介绍: Linux 环境 ...

  5. Hadoop实战实例

    Hadoop实战实例   Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如 ...

  6. 《Hadoop实战手册》一1.6 配置Sqoop以支持SQL Server

    本节书摘来异步社区<Hadoop实战手册>一书中的第1章,第1.6节,作者: [美]Jonathan R. Owens , Jon Lentz , Brian Femiano 译者: 傅杰 ...

  7. Hadoop自带WordCount.java程序

    位置:{Hadoop_HOME}\hadoop-0.20.1\src\examples\org\apache\hadoop\examples\WordCount.java 其中{Hadoop_HOME ...

  8. 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

  9. Hadoop实战-中高级部分 之 Hadoop 集群安装

    Hadoop RestFul Hadoop HDFS原理1 Hadoop HDFS原理2 Hadoop作业调优参数调整及原理 Hadoop HA Hadoop MapReduce高级编程 Hadoop ...

最新文章

  1. LeetCode 110 Balanced Binary Tree 平衡二叉树
  2. 记Booking.com iOS开发岗位线上笔试
  3. mybatis的typeAliases别名
  4. jQuery EasyUI使用教程之创建标签页
  5. 二分实现:查找数组中的峰值元素
  6. 我国快递年业务量首次突破千亿件大关
  7. 字典dictionary
  8. vue之组件之间的传值
  9. 万万没想到,区块链将提升无人驾驶安全性!
  10. Linux网络编程基础:recv函数
  11. verilog实现N分频电路
  12. python中‘ ‘.join()的使用
  13. STM32实战总结:HAL之GPIO
  14. 计算机常用英语词汇及读音,100个最常用英文单词的完美发音,so easy!
  15. Unity 实现跳转ios 设置界面
  16. burp抓不到手机app请求包
  17. 知名APP(支付宝、微信、花瓣等)首页设计技巧及原型实例讲解
  18. java多线程归并排序_并行计算实验-串、并行排序算法
  19. 如何使用 Python 爬虫爬取牛客网 Java 题库?
  20. 小学计算机教师集体备课计实,教师集体备课心得体会精选5篇合集

热门文章

  1. Docker系列(1-简介篇) -- 为什么要使用docker?
  2. spoon各个控件的说明
  3. Java猿社区—Redis一篇系列—第一章、NoSql入门和概述
  4. HTML实现动态圣诞树和雪花效果
  5. 参加公众号互推的背后
  6. 计算机控制面板的字体在哪里,电脑的字体怎么设置
  7. java中文转换工具类
  8. 本地消息表(异步确保)
  9. PIN, PIN2, PUK, PUK2
  10. C语言的3种打桩方法总结