三十、MapReduce之wordcount案例(环境搭建及案例实施)

举报
托马斯-酷涛 发表于 2022/05/25 23:23:18 2022/05/25
【摘要】 环境准备: Hadoop2.6.0 IDEA maven3.5.4 案例分析:         MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。本项目用到的便是俗称H...

环境准备:

Hadoop2.6.0

IDEA

maven3.5.4

案例分析:

        MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。本项目用到的便是俗称Helloword的数据提取案例,官网源码见hadoop安装目录:       

/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar

注意:在windows下直接查看需要反编译工具,解析jar包

 输入数据:                                                        

 期望输出数据:

 环境搭建:

1.配置maven

        将下载好的maven路径配置进去

 

 

2.配置解释器

3.在pom.xml文件中添加如下依赖

        如下依赖只需要更改版本号即可,导入后刷新IDEA即可自动下载依赖


  
  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>RELEASE</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.logging.log4j</groupId>
  9. <artifactId>log4j-core</artifactId>
  10. <version>2.8.2</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.apache.hadoop</groupId>
  14. <artifactId>hadoop-common</artifactId>
  15. <version>2.7.2</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.hadoop</groupId>
  19. <artifactId>hadoop-client</artifactId>
  20. <version>2.7.2</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.apache.hadoop</groupId>
  24. <artifactId>hadoop-hdfs</artifactId>
  25. <version>2.7.2</version>
  26. </dependency>
  27. </dependencies>

 4.在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”,在文件中填入。


  
  1. log4j.rootLogger=INFO, stdout
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
  5. log4j.appender.logfile=org.apache.log4j.FileAppender
  6. log4j.appender.logfile.File=target/spring.log
  7. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
  8. log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

程序编写:

(1)编写Mapper类


  
  1. package org.example.mapreduce.wordcount;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Mapper;
  6. import java.io.IOException;
  7. public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
  8. private Text outk = new Text();
  9. private IntWritable outv = new IntWritable(1);
  10. @Override
  11. protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
  12. //获取一行
  13. String line = value.toString();
  14. //切割
  15. String[] words = line.split(" ");
  16. //循环写出
  17. for (String word : words) {
  18. //封装
  19. outk.set(word);
  20. //写出
  21. context.write(outk, outv);
  22. }
  23. }
  24. }

(2)编写Reducer类


  
  1. package org.example.mapreduce.wordcount;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Reducer;
  5. import java.io.IOException;
  6. public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
  7. IntWritable outV = new IntWritable();
  8. @Override
  9. protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
  10. int sum = 0;
  11. //tuomasi(1,1)
  12. //累加
  13. for (IntWritable value : values) {
  14. sum += value.get();
  15. }
  16. //写出
  17. outV.set(sum);
  18. context.write(key, outV);
  19. }
  20. }

(3)编写Driver类


  
  1. package org.example.mapreduce.wordcount;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.IntWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Job;
  7. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  8. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  9. import java.io.IOException;
  10. public class WordCountDriver {
  11. public static void main(String[] args) throws IOException, ClassNotFoundException ,InterruptedException{
  12. //1.获取job
  13. Configuration conf = new Configuration();
  14. Job job = Job.getInstance(conf);
  15. //2.设置jor包路径
  16. job.setJarByClass(WordCountDriver.class);
  17. //3.关联mapper和reducer
  18. job.setMapperClass(WordCountMapper.class);
  19. job.setReducerClass(WordCountReducer.class);
  20. //4.设置mapper输出的k,v类型
  21. job.setMapOutputKeyClass(Text.class);
  22. job.setMapOutputValueClass(IntWritable.class);
  23. //5.设置最终输出的K,V类型
  24. job.setOutputKeyClass(Text.class);
  25. job.setOutputValueClass(IntWritable.class);
  26. //6.设置输入路径和输出路径
  27. FileInputFormat.setInputPaths(job, new Path("E:\\input\\inputword"));
  28. FileOutputFormat.setOutputPath(job, new Path("E:\\output\\outputword"));
  29. //7.提交job作业
  30. boolean result = job.waitForCompletion(true);
  31. System.exit(result ? 0 : 1);
  32. }
  33. }

本地测试:

 注意:此处输出路径不能在运行前存在(提前存在会报错),运行后会自动生成

运行:

 如图所示即为运行成功。

找到本地生成的文件,查看是否与期望值相同,如图:

涉及到的问题:

注意:在第一次运行可能会报缺少winutils错误,只需下载对应版本的winutils.exe文件解压到本地,配置Hadoop的环境变量即可

我的Hadoop为2.6.0版即使用如下包,提取码:0000 下方链接:

https://pan.baidu.com/s/1CMgma_VoO2mJ6iRROd7HCg

或:

https://download.csdn.net/download/m0_54925305/22011870?spm=1001.2014.3001.5501

环境变量:

1.配置系统变量HADOOP_HOME,路径指向hadoop-common-2.6.0-bin-master

 2.Path配置,加入:%HADOOP_HOME%\bin

        友情提示:

如遇代码运行过程中有多处警告或报错大多都是因为导包出错的,请仔细查看包是否导入正确。 

 环境搭建及WordCount案例完成。

文章来源: tuomasi.blog.csdn.net,作者:托马斯-酷涛,版权归原作者所有,如需转载,请联系作者。

原文链接:tuomasi.blog.csdn.net/article/details/120155693

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。