- 浏览: 211291 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (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 392一、 hadoop job list 查看 hadoop ... -
Hadoop2.0 HA 集群搭建步骤
2017-06-10 18:40 411Hadoop2.0 HA 集群搭建步骤 一、准备 1.新建 ... -
MapReduce(4)
2017-06-05 22:32 402一、处理多个文件 求每个同学每科成绩的总分 chinese.t ... -
MapReduce(3)
2017-06-04 20:51 571一、Mapper分区数量 1.Mapper 分区数量 = 文 ... -
MapReduce(2)
2017-06-04 18:46 541一、去除重复的内容 源文件: 192.168.234.21 ... -
Hadoop插件
2017-05-19 22:35 3091.启动hadoop cd ../sbin sh ./sta ... -
HDFS命令
2017-05-15 23:01 4931.创建目录 hadoop fs -mkdir /park0 ... -
搭建Hadoop
2017-05-11 22:01 5171.修改虚拟机内存为1GB 2.Xshell / Ser ...
相关推荐
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
SATA命令协议文档,新手必学,高手必经之路的利器。
白色大气风格响应式产品展示企业网页模板.zip
内容概要:文章介绍了如何使用Python开发一个简单的自动点餐程序。该程序通过显示菜单、接收用户点单输入并记录订单详情,最终计算总费用,展示了基础的交互流程和订单处理方法。 适合人群:Python初学者,对交互式程序设计感兴趣的学习者。 使用场景及目标:适用于希望了解基本交互式应用程序开发流程的新手程序员,目标是掌握Python中的函数定义、数据结构使用、流程控制以及简单的用户交互技术。 阅读建议:跟随程序步骤实践,尝试扩展或优化现有功能,如加入折扣计算、订单存储等功能,以增强理解和编程能力。
白色大气风格的境外游景区模板下载.zip
白色大气风格的商业模板下载.zip
华豫佰佳组合促销视图.sql
白色创意风格的室内装修设计CSS3模板.zip
platform-tools-latest-darwin.zip
CH579 以太网转串口 串口服务器代码 需要自己编程提升能力的非常值得参考的代码 几乎所有的编程思路编程技巧资源都涉及到了,代码简单易懂 ,注释清楚,本代码实现最串口服务器的功能,有电路图。
白色非常简洁的商务网站模板下载.zip
白色大气风格的美食DIY应用APP官网模板.zip
白色大气风格的女性风衣企业网站模板.zip
1. 平台在家电和电子产品方面的营运情况如何? 2. 哪些品牌和类别销量最高? 3. 用户消费规律 4. 哪些是我们的重点用户? 5. 平台有哪些优势和不足,需要如何改进?
白色大气简洁的汽车配件商城整站网站模板下载.zip
白色简洁的数码相机商城整站网站模板下载.zip
白色大气风格的多用途企业网站模板.zip
白色大气风格的恐龙化石博物馆模板下载.zip
HCIA..............