Hadoop实战 一 WordCount
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 –>--><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相关推荐
- Hadoop实战(6)_搭建Apache Hadoop的Eclipse开发环境
系列目录: Hadoop实战(1)_阿里云搭建Hadoop2.x的伪分布式环境 Hadoop实战(2)_虚拟机搭建Hadoop的全分布模式 Hadoop实战(3)_虚拟机搭建CDH的全分布模式 Had ...
- Hadoop实战之三~ Hello World
本文介绍的是在Ubuntu下安装用三台PC安装完成Hadoop集群并运行好第一个Hello World的过程,软硬件信息如下: Ubuntu:12.04 LTS Master: 1.5G RAM,奔腾 ...
- 【大数据Hadoop实战篇】
大数据Hadoop实战篇 第1章 Hadoop概述 1.1 Hadoop是什么 1.2 Hadoop发展历史(了解) 1.3 Hadoop三大发行版本(了解) 1.4 Hadoop优势(4高) 1.5 ...
- Hadoop实战篇(1)
Hadoop实战篇(1) 作者 | WenasWei 前言 在前面介绍过了Hadoop-离线批处理技术的整体架构,接下来便开始学习安装配置并使用 Hadoop ; 将从以下几点介绍: Linux 环境 ...
- Hadoop实战实例
Hadoop实战实例 Hadoop 是Google MapReduce的一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行.就如 ...
- 《Hadoop实战手册》一1.6 配置Sqoop以支持SQL Server
本节书摘来异步社区<Hadoop实战手册>一书中的第1章,第1.6节,作者: [美]Jonathan R. Owens , Jon Lentz , Brian Femiano 译者: 傅杰 ...
- Hadoop自带WordCount.java程序
位置:{Hadoop_HOME}\hadoop-0.20.1\src\examples\org\apache\hadoop\examples\WordCount.java 其中{Hadoop_HOME ...
- 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...
这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...
- Hadoop实战-中高级部分 之 Hadoop 集群安装
Hadoop RestFul Hadoop HDFS原理1 Hadoop HDFS原理2 Hadoop作业调优参数调整及原理 Hadoop HA Hadoop MapReduce高级编程 Hadoop ...
最新文章
- LeetCode 110 Balanced Binary Tree 平衡二叉树
- 记Booking.com iOS开发岗位线上笔试
- mybatis的typeAliases别名
- jQuery EasyUI使用教程之创建标签页
- 二分实现:查找数组中的峰值元素
- 我国快递年业务量首次突破千亿件大关
- 字典dictionary
- vue之组件之间的传值
- 万万没想到,区块链将提升无人驾驶安全性!
- Linux网络编程基础:recv函数
- verilog实现N分频电路
- python中‘ ‘.join()的使用
- STM32实战总结:HAL之GPIO
- 计算机常用英语词汇及读音,100个最常用英文单词的完美发音,so easy!
- Unity 实现跳转ios 设置界面
- burp抓不到手机app请求包
- 知名APP(支付宝、微信、花瓣等)首页设计技巧及原型实例讲解
- java多线程归并排序_并行计算实验-串、并行排序算法
- 如何使用 Python 爬虫爬取牛客网 Java 题库?
- 小学计算机教师集体备课计实,教师集体备课心得体会精选5篇合集