hadoop初体验——WordCount实例
WordCount实例是大数据学习过程中的入门,相当于学习各种编程语言时打印“Hello World”的一样。本次实验是通过Java代码来实现的。
- 数据准备
任意创建一个文本文件,在其中写入一些单词,并用空格隔开。 - Mapper阶段:
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 java.io.IOException;/*** WordCount程序 Mapper类** 自定义的xxxMapper类,需要继承Hadoop提供的Mapper类,并重写map方法** 按照当前WordCount程序来分析:* 四个泛型: 两组kv对* 输入数据的kv类型:* KEYIN : LongWritable 表示文件读取数据的偏移量,简单理解为每次从文件的哪个位置开始读取数据.* VALUEIN : Text 实际从文件中读取的一行数据* 输出数据的kv类型:* KEYOUT : Text, 表示一个单词* VALUEOUT : IntWritable, 表示这个单词出现了1次.*/ public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {// 定义输出的k(单词) 和 v(单词数,1)private Text outk = new Text();private IntWritable outv = new IntWritable(1);/*** Map阶段处理的业务逻辑* @param key KEYIN 输入数据的key* @param value VALUEIN 输入数据的value* @param context 上下文对象,负责整个Mapper类指定过程的调度.*/@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//1. 获取到输入的一行数据String line = value.toString();//2. 切割String[] words = line.split(" ");//3. 将每个单词拼成kv写出for (String word : words) {//封装k 和 voutk.set(word);//写出context.write(outk,outv);}} }
mapper阶段结束后,数据将会被拆分成一个个<单词, 1>的键值对形式。经过shuffle过程后,形成<单词, <1, 1, 1, 1, ……>>形式,而后传递给reducer处理。
- Reducer阶段
import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** WordCount程序的 Reducer类** 自定义的xxxReducer类需要继承Hadoop提供的Reducer类,重写reduce方法** 按照当前wordCount程序来分析:* 4个泛型 : 两组kv对* 输入数据的kv类型: Reducer输入数据的kv对象要对应Mapper输出数据的kv类型* KEYIN : Text 表示一个单词* VALUEIN : IntWritable 表示该单词出现了1次* 输出数据的kv类型:* KEYOUT : Text 表示一个单词* VALUEOUT: IntWritable 表示该单词总共出现的次数*/ public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {//定义输出的vprivate IntWritable outv = new IntWritable();/*** Reduce阶段的业务逻辑处理* @param key KEYIN , 表示一个单词* @param values 迭代器对象, 表示一个相同的单词(相同key)出现的次数的封装. 能够表明当前 的单词出现了多少次.* @param context 上下文对象, 负责Reducer类执行过程的调度*/@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {// 定义变量求和int sum = 0;// 1. 将当前的单词出现的次数进行汇总.for (IntWritable value : values) {sum += value.get();}// 2. 封装k和voutv.set(sum);// 3. 写出context.write(key,outv);} }
Reducer阶段主要是对shuffle阶段的value-list进行处理,类加求和,最终以<k, v>对的形式输出
- 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;/*** WordCount程序的 Driver类*/ public class WordCountDriver {public static void main(String[] args) throws Exception {//1.获取Job对象Configuration conf = new Configuration();Job job = Job.getInstance(conf);//2.关联jar,设置驱动类job.setJarByClass(WordCountDriver.class);//3.关联Mapper 和 Reducerjob.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReducer.class);//4.设置Mapper 输出的key 和 value的类型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);//5.设置最终输出的key 和 value的类型// 如果有reducer,就写reducer输出的kv类型,如果没有reducer,就写mapper输出的kv类型.job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);//6.设置输入和输出路径FileInputFormat.setInputPaths(job,new Path("文件所在路径"));FileOutputFormat.setOutputPath(job,new Path("结果输出路径")); // 输出目录不能存在,否则会报异常//7.提交Jobjob.waitForCompletion(true);} }
hadoop初体验——WordCount实例相关推荐
- hadoop初体验Linux指令学习
知识点一 Hadoop简介 知识点二 Hadoop简介2 知识点三 HDFS和MapReduce简介 知识点四 Linux命令回顾 查看网卡信息 ifconfig 查看文件(不包括隐藏) ls 查看文 ...
- python hadoop wordcount_Hadoop之wordcount实例-MapReduce程序
实验目的 利用搭建好的大数据平台 Hadoop,对 HDFS 中的文本文件进行处理,采用 Hadoop Steaming 方式,使用 Python 语言实现英文单词的统计功能,并输出单词统计结果. 实 ...
- Hadoop集群启动、初体验
1. 启动方式 要启动Hadoop集群,需要启动HDFS和YARN两个集群. 注意:首次启动HDFS时,必须对其进行格式化操作.本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的. h ...
- Hadoop3——集群搭建以及初体验
1. 匹配主机名 2.下载安装hadoop 3. 配置Hadoop环境 4. 启动Hadoop环境 5. Hadoop初体验 建议先整体浏览一遍再做 (关于创建虚拟机的操作日后有需要的话我再补上) 1 ...
- 三、Hadoop系统应用之Hadoop集群测试及初体验(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)
Hadoop集群搭建前安装准备参考: 一.Hadoop系统应用之安装准备(一)(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) 一.Ha ...
- Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法
Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法 环境说明 系统:ubuntu18.04 主机名:test1 用 ...
- hadoop运行wordcount实例,hdfs简单操作
1.查看hadoop版本 [hadoop@ltt1 sbin]$ hadoop version Hadoop 2.6.0-cdh5.12.0 Subversion http://github.com/ ...
- java tls 实例_grpc加密TLS初体验(go、java版本)
grpc加密TLS初体验(go.java版本) grpc-go.java的安装编译helloworld可以参考如下文章 openssl的安装.生成秘钥证书可以参考如下文章 示例代码go版本 服务端代码 ...
- MapReduce编程初体验
需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...
- yii schema.mysql.sql_YII学习,初体验 ,对YII的一些理解.
先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...
最新文章
- getRotationMatrix2D函数
- HashMap两种遍历数据的方式
- 基于QGIS初探PostgreSQL的PostGIS插件,包括YUM和编译安装PostGIS
- 2压缩备份数据库_达梦数据库备份与还原
- 原型模式(Prototype )
- Scala下载安装和环境变量配置
- JMeter使用教程(一)
- 卫星电话是直接与卫星通信还是通过地面站?
- 360加固签名验证_android - 使用360加固的方法(需要在windows下面,先加固,再签名)...
- Unity LineRenderer 画运动轨迹
- 整理的java基础知识点笔记
- u盘连接计算机找不到,重装系统后U盘插入电脑怎么没反应?找不到U盘盘符解决办法...
- PHP开发环境搭建和phpinfo函数
- @Inject 注解的使用
- 基于FPGA的密码锁开发——(1)密码锁驱动
- 实验A---- ADFA的可判定性
- 数商云:把握数字化核心趋势,推动煤炭企业数字化转型布局
- 经典DP:测试鸡蛋承受力
- win7打印机提示无法保存设置错误0x00006cc的处理方法
- 集成电路中电流镜的分析与布局设计
热门文章
- 基于51单片机的LED彩灯控制器设计
- 搜狐公司董事局主席兼首席执行官——张朝阳名言3
- Wallpaper (18)
- flutter | 悬浮窗解决方案 flutter_floating
- ArcGIS JS之 identify接口之 exceededTransferLimit属性
- current account(经常账户)
- 四个问题,判断自己是否适合学习编程
- 【WB32库开发】第13章(上)DMA直接存储器访问——存储器到存储器
- 蒸烤一体机哪个品牌好性价比高,盘点国内消费者呼声最高的品牌推荐
- 解决混淆报错问题-打包签名出现问题的解决方法