- 浏览: 208869 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (267)
- java.lang (8)
- 问题汇总 (21)
- 异常记录 (20)
- 功能实现 (19)
- 面试总结 (25)
- 技巧总结 (8)
- 常用代码 (4)
- 编程习惯 (3)
- 编码规则 (3)
- java.util (10)
- java.io (1)
- JavaWeb (9)
- MySQL (16)
- SVN (3)
- MyBatis (11)
- Velocity (7)
- 其他知识 (10)
- 人生哲理 (1)
- 人生故事 (1)
- 自我感悟 (1)
- shiro (3)
- 基础知识 (0)
- 问题总结 (1)
- Spring 标签 (1)
- Spring (3)
- 点滴生活 (1)
- DOS (1)
- CAS (4)
- Linux (9)
- Storm (6)
- Shell (1)
- regex (1)
- Collection (4)
- poi (1)
- 经典语句 (1)
- NIO (5)
- concurrent (14)
- RPC (1)
- zookeeper (3)
- 待整理 (2)
- Hadoop (9)
- RabbitMq (2)
- flume (1)
- hive (7)
- hbase (4)
- kafka (1)
- scala (1)
- GC (0)
- java.util.concurrent.atomic (1)
- java.lang.ref (6)
- JVM (2)
- algorithm (1)
- conception (1)
- java key word (1)
- sun.misc (1)
最新评论
WordCount
统计文本单词的数量
源文件内容:
word.txt
hello world
hello hadoop
hello 1606
hello world
一、Map 处理
1.在 hdfs 上新增 path -- wordCount , 上传 word.txt
选中 hadoop 连接 --> 右键 -->
新增path :create new dictory
上传文件 :upload file
2.新建 MapReduce 工程
3.新增 Mapper.java
4.新增 WordCountDriver
5.导出 jar 包
export --> jar file -->
不勾选配置文件
选择运行入口
6.上传文件到 linux 上
7.运行
hadoop jar wordCount.java
8.运行结果
9.异常处理
解决:
hdfs-site.xml 与 core-site.xml 中 需要配置数据路径且需要一致
http://blog.sina.com.cn/s/blog_61d8d9640102whof.html
10.结果分析
Path : wordCount/result 中生成的文件
0 hello world
13 hello hadoop
27 hello 1606
39 hello world
相比与源文件,多了一行 key 值,key 是字符串的偏移量
对应Map 的 key 与 value 的格式,key 是 LongWritable 类型 ,value 是 Text 类型
二、Reducer
1.未统计单词数量,欲将输出结果改为
hello world 1
hello hadoop 1
hello 1606 1
hello world 1
即:将原来的value 作为 key ,也就是单词作为 key 处理
修改 Key 与value的类型,并修改输出路径,否则,报错:路径已存在的异常
2.
导出 jar 包 、 上传 jar 包并运行 hadoop jar wordCount.jar
再次处理后的结果为:
1606 1
hadoop 1
hello 1
hello 1
hello 1
hello 1
world 1
world 1
3.添加 reducer 处理
导出 jar 包 ,上传 并 运行
reducer 处理结果为:
1606 ,1
hadoop ,1
hello ,1,1,1,1
world ,1,1
即:reducer 将 mapper 中相同的 key 的value进行了合并
4.统计单词数量
配置文件 log4j.properties
右键,选择 WordCountDriver
run as hadoop
无需上传 jar包 ,在本地客户端运行
运行结果:
1606 1
hadoop 1
hello 4
world 2
三、总结
Map:
将 TXT 中的文件按照 key 与 value 的格式输出
Reduce
将 Map 传递过来的数据,按照 key 值相同,进行 value 数据的整合
Mapper.java 中 value 的 类型 与
Reducer.java 中 value 的类型 要对应
统计文本单词的数量
源文件内容:
word.txt
hello world
hello hadoop
hello 1606
hello world
一、Map 处理
1.在 hdfs 上新增 path -- wordCount , 上传 word.txt
选中 hadoop 连接 --> 右键 -->
新增path :create new dictory
上传文件 :upload file
2.新建 MapReduce 工程
3.新增 Mapper.java
package com.study.wordcount.day01; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class WordCountMapper extends Mapper<LongWritable, Text,LongWritable, Text> { @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, LongWritable, Text>.Context context) throws IOException, InterruptedException { context.write(key, value); } }
4.新增 WordCountDriver
package com.study.wordcount.day01; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; 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; public class WordCountDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); // 设置Job运行的类 job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); // 设置Mappre 组件输出的KEY的类型 job.setMapOutputKeyClass(LongWritable.class); job.setMapOutputValueClass(Text.class); FileInputFormat.setInputPaths(job, new Path("/wordCount/words.txt")); FileOutputFormat.setOutputPath(job, new Path("/wordCount/result")); job.waitForCompletion(true); } }
5.导出 jar 包
export --> jar file -->
不勾选配置文件
选择运行入口
6.上传文件到 linux 上
7.运行
hadoop jar wordCount.java
8.运行结果
9.异常处理
解决:
hdfs-site.xml 与 core-site.xml 中 需要配置数据路径且需要一致
http://blog.sina.com.cn/s/blog_61d8d9640102whof.html
10.结果分析
Path : wordCount/result 中生成的文件
0 hello world
13 hello hadoop
27 hello 1606
39 hello world
相比与源文件,多了一行 key 值,key 是字符串的偏移量
对应Map 的 key 与 value 的格式,key 是 LongWritable 类型 ,value 是 Text 类型
二、Reducer
1.未统计单词数量,欲将输出结果改为
hello world 1
hello hadoop 1
hello 1606 1
hello world 1
即:将原来的value 作为 key ,也就是单词作为 key 处理
public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> { @Override protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException { String line = value.toString(); String [] datas = line.split(" "); for(String word : datas){ context.write(new Text(word), new IntWritable(1)); } } }
Configuration conf = new Configuration(); Job job = Job.getInstance(conf); // 设置Job运行的类 job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); // 设置Mappre 组件输出的KEY的类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path("/wordCount/words.txt")); FileOutputFormat.setOutputPath(job, new Path("/wordCount/result1")); job.waitForCompletion(true);
修改 Key 与value的类型,并修改输出路径,否则,报错:路径已存在的异常
2.
导出 jar 包 、 上传 jar 包并运行 hadoop jar wordCount.jar
再次处理后的结果为:
1606 1
hadoop 1
hello 1
hello 1
hello 1
hello 1
world 1
world 1
3.添加 reducer 处理
package com.study.wordcount.day01; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; /** * * Map组件可独立运行,Reducer组件需在Map基础上运行 * * 独立运行 Map ,结果为 Map 组件输出结果 * 添加reducer 后,结果 reducer 处理的结果 * */ public class WordCountReducer extends Reducer<Text, IntWritable, Text, Text> { @Override protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, Text>.Context context) throws IOException, InterruptedException { StringBuilder sb = new StringBuilder(); for(IntWritable intw : values){ sb.append(",").append(intw.get()); } context.write(key, new Text(sb.toString())); } }
public class WordCountDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); // 设置Job运行的类 job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); // 设置Mappre 组件输出的KEY的类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); // 设置 reducer 的key 与 value job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.setInputPaths(job, new Path("/wordCount/words.txt")); FileOutputFormat.setOutputPath(job, new Path("/wordCount/result2")); job.waitForCompletion(true); } }
导出 jar 包 ,上传 并 运行
reducer 处理结果为:
1606 ,1
hadoop ,1
hello ,1,1,1,1
world ,1,1
即:reducer 将 mapper 中相同的 key 的value进行了合并
4.统计单词数量
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> { @Override protected void reduce(Text key , Iterable<IntWritable> value, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException { Integer result = 0 ; for(IntWritable intw : value){ result = result + intw.get(); } context.write(key, new IntWritable(result)); } }
public class WordCountDriver { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); Job job = Job.getInstance(conf); // 设置Job运行的类 job.setJarByClass(WordCountDriver.class); job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); // 设置Mappre 组件输出的KEY的类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); // 设置 reducer 的key 与 value job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.setInputPaths(job, new Path("hdfs://192.168.76.131:9000/wordCount/words.txt")); FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.76.131:9000/wordCount/result3")); job.waitForCompletion(true); } }
配置文件 log4j.properties
###\u8BBE\u7F6E ### log4j.rootLogger = info,stdout ###\u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
右键,选择 WordCountDriver
run as hadoop
无需上传 jar包 ,在本地客户端运行
运行结果:
1606 1
hadoop 1
hello 4
world 2
三、总结
Map:
将 TXT 中的文件按照 key 与 value 的格式输出
Reduce
将 Map 传递过来的数据,按照 key 值相同,进行 value 数据的整合
Mapper.java 中 value 的 类型 与
Reducer.java 中 value 的类型 要对应
发表评论
-
hadoop
2017-06-17 09:03 376一、 hadoop job list 查看 hadoop ... -
Hadoop2.0 HA 集群搭建步骤
2017-06-10 18:40 406Hadoop2.0 HA 集群搭建步骤 一、准备 1.新建 ... -
MapReduce(4)
2017-06-05 22:32 398一、处理多个文件 求每个同学每科成绩的总分 chinese.t ... -
MapReduce(3)
2017-06-04 20:51 563一、Mapper分区数量 1.Mapper 分区数量 = 文 ... -
MapReduce(2)
2017-06-04 18:46 535一、去除重复的内容 源文件: 192.168.234.21 ... -
Hadoop插件
2017-05-19 22:35 3041.启动hadoop cd ../sbin sh ./sta ... -
HDFS命令
2017-05-15 23:01 4861.创建目录 hadoop fs -mkdir /park0 ... -
搭建Hadoop
2017-05-11 22:01 5101.修改虚拟机内存为1GB 2.Xshell / Ser ...
相关推荐
实验项目“MapReduce 编程”旨在让学生深入理解并熟练运用MapReduce编程模型,这是大数据处理领域中的核心技术之一。实验内容涵盖了从启动全分布模式的Hadoop集群到编写、运行和分析MapReduce应用程序的全过程。 ...
基于MapReduce实现决策树算法的知识点 基于MapReduce实现决策树算法是一种使用MapReduce框架来实现决策树算法的方法。在这个方法中,主要使用Mapper和Reducer来实现决策树算法的计算。下面是基于MapReduce实现决策...
MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。这个模型将复杂的计算任务分解成两个主要阶段:Map(映射)和Reduce(化简),使得在大规模分布式环境下处理大数据变得可能...
【标题】Hadoop MapReduce 实现 WordCount MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的...
### 大数据实验四-MapReduce编程实践 #### 一、实验内容与目的 ##### 实验内容概述 本次实验的主要内容是使用MapReduce框架来实现WordCount词频统计功能,即统计HDFS(Hadoop Distributed File System)系统中多个...
MapReduce之数据清洗ETL详解 MapReduce是一种基于Hadoop的分布式计算框架,广泛应用于大数据处理领域。数据清洗(Data Cleaning)是数据处理过程中非常重要的一步,旨在清洁和转换原始数据,使其更加可靠和有用。...
单词计数是最简单也是最能体现 MapReduce 思想的程序之一,可以称为 MapReduce 版“Hello World”。单词计数的主要功能是统计一系列文本文件中每个单词出现的次数。本节通过单词计数实例来阐述采用 MapReduce 解决...
基于MapReduce的Apriori算法代码 基于MapReduce的Apriori算法代码是一个使用Hadoop MapReduce框架实现的关联规则挖掘算法,称为Apriori算法。Apriori算法是一种经典的关联规则挖掘算法,用于发现事务数据库中频繁...
【大数据Hadoop MapReduce词频统计】 大数据处理是现代信息技术领域的一个重要概念,它涉及到海量数据的存储、管理和分析。Hadoop是Apache软件基金会开发的一个开源框架,专门用于处理和存储大规模数据集。Hadoop的...
(2)打开网站localhost:8088和localhost:50070,查看MapReduce任务启动情况 (3)写wordcount代码并把代码生成jar包 (4)运行命令 (1):把linus下的文件放到hdfs上 (2):运行MapReduce (5):查看运行结果 ...
MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解成两个主要阶段:Map(映射)和Reduce(化简)。在这个"MapReduce项目 数据清洗"中,我们将探讨...
一个自己写的Hadoop MapReduce实例源码,网上看到不少网友在学习MapReduce编程,但是除了wordcount范例外实例比较少,故上传自己的一个。包含完整实例源码,编译配置文件,测试数据,可执行jar文件,执行脚本及操作...
在大数据处理领域,MapReduce是一种广泛使用的分布式计算框架,由Google提出并被Hadoop采纳为标准组件。本案例主要探讨如何使用MapReduce来求取数据集的行平均值,这在数据分析、数据挖掘以及日志分析等场景中非常...
### MapReduce基础知识详解 #### 一、MapReduce概述 **MapReduce** 是一种编程模型,最初由Google提出并在Hadoop中实现,用于处理大规模数据集的分布式计算问题。该模型的核心思想是将复杂的大型计算任务分解成较...
【MapReduce初级编程实践】是大数据处理中的一项基础任务,主要应用于大规模数据集的并行计算。在这个实验中,我们关注的是如何利用MapReduce来实现文件的合并与去重操作。MapReduce是一种分布式计算模型,由Google...
赠送jar包:hadoop-mapreduce-client-jobclient-2.6.5.jar; 赠送原API文档:hadoop-mapreduce-client-jobclient-2.6.5-javadoc.jar; 赠送源代码:hadoop-mapreduce-client-jobclient-2.6.5-sources.jar; 赠送...
MapReduce 编程模型简介 MapReduce 是一种编程模型,由 Jeffrey Dean 和 Sanjay Ghemawat 于 2004 年提出,用于处理大规模数据集的分布式计算。该模型将计算任务分解成两个主要阶段:Map 和 Reduce。Map 阶段将...
【标题】"基于javaweb + mapreduce的小型电影推荐系统"揭示了这个项目的核心技术栈,即Java Web和MapReduce。在这个系统中,Java Web技术用于构建前端用户界面和后端服务器逻辑,而MapReduce则被用作大数据处理框架...