Hadoop MapReduce编程 API入门系列之wordcount版本2(六)

简介:

 

 

 

代码

复制代码
 1 package zhouls.bigdata.myMapReduce.wordcount4;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.hadoop.io.IntWritable;
 6 import org.apache.hadoop.io.LongWritable;
 7 import org.apache.hadoop.io.Text;
 8 import org.apache.hadoop.mapreduce.Mapper;
 9 import org.apache.hadoop.util.StringUtils;
10 
11 public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
12 
13 //该方法循环调用,从文件的split中读取每行调用一次,把该行所在的下标为key,该行的内容为value
14 protected void map(LongWritable key, Text value,
15 Context context)
16 throws IOException, InterruptedException {
17 String[] words = StringUtils.split(value.toString(), ' ');
18 for(String w :words){
19 context.write(new Text(w), new IntWritable(1));
20 }
21 }
22 }
复制代码

 

 

复制代码
 1 package zhouls.bigdata.myMapReduce.wordcount4;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.hadoop.io.IntWritable;
 6 import org.apache.hadoop.io.Text;
 7 import org.apache.hadoop.mapreduce.Reducer;
 8 
 9 public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
10 
11 //每组调用一次,这一组数据特点:key相同,value可能有多个。
12 protected void reduce(Text arg0, Iterable<IntWritable> arg1,
13 Context arg2)
14 throws IOException, InterruptedException {
15 int sum =0;
16 for(IntWritable i: arg1){
17 sum=sum+i.get();
18 }
19 arg2.write(arg0, new IntWritable(sum));
20 }
21 }
复制代码

 

 

 

 

 

 

 

 

 

//System.setProperty("HADOOP_USER_NAME", "root");
//
//1、MR执行环境有两种:本地测试环境,服务器环境
//
//本地测试环境(windows):(便于调试)
// 在windows的hadoop目录bin目录有一个winutils.exe
// 1、在windows下配置hadoop的环境变量
// 2、拷贝debug工具(winutils.exe)到HADOOP_HOME/bin
// 3、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
//
// 4、MR调用的代码需要改变:
// a、src不能有服务器的hadoop配置文件(因为,本地是调试,去服务器环境集群那边的)
// b、再调用是使用:
// Configuration config = new Configuration();
// config.set("fs.defaultFS", "hdfs://HadoopMaster:9000");
// config.set("yarn.resourcemanager.hostname", "HadoopMaster");

//服务器环境:(不便于调试),有两种方式。
//首先需要在src下放置服务器上的hadoop配置文件(都要这一步)
//1、在本地直接调用,执行过程在服务器上(真正企业运行环境)
// a、把MR程序打包(jar),直接放到本地
// b、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
// c、增加一个属性:
// config.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");
// d、本地执行main方法,servlet调用MR。
//
//
//2、直接在服务器上,使用命令的方式调用,执行过程也在服务器上
// a、把MR程序打包(jar),传送到服务器上
// b、通过: hadoop jar jar路径 类的全限定名
//
//
//
//
//a,1 b,1
//a,3 c,3
//a,2 d,2
//
//
//a,3 c,3
//a,2 d,2
//a,1 b,1
//

 

复制代码
 1 package zhouls.bigdata.myMapReduce.wordcount4;
 2 
 3 
 4 import org.apache.hadoop.conf.Configuration;
 5 import org.apache.hadoop.fs.FileSystem;
 6 import org.apache.hadoop.fs.Path;
 7 import org.apache.hadoop.io.IntWritable;
 8 import org.apache.hadoop.io.Text;
 9 import org.apache.hadoop.mapreduce.Job;
10 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
11 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
12 
13 public class RunJob {
14 
15 public static void main(String[] args) {
16 Configuration config =new Configuration();
17 config.set("fs.defaultFS", "hdfs://HadoopMaster:9000");
18 config.set("yarn.resourcemanager.hostname", "HadoopMaster");
19 //    config.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");//先打包好wc.jar
20 try {
21 FileSystem fs =FileSystem.get(config);
22 
23 Job job =Job.getInstance(config);
24 job.setJarByClass(RunJob.class);
25 
26 job.setJobName("wc");
27 
28 job.setMapperClass(WordCountMapper.class);
29 job.setReducerClass(WordCountReducer.class);
30 
31 job.setMapOutputKeyClass(Text.class);
32 job.setMapOutputValueClass(IntWritable.class);
33 
34 FileInputFormat.addInputPath(job, new Path("/usr/input/wc/wc.txt"));//新建好输入路径,且数据源
35 
36 Path outpath =new Path("/usr/output/wc");
37 if(fs.exists(outpath)){
38 fs.delete(outpath, true);
39 }
40 FileOutputFormat.setOutputPath(job, outpath);
41 
42 boolean f= job.waitForCompletion(true);
43 if(f){
44 System.out.println("job任务执行成功");
45 }
46 } catch (Exception e) {
47 e.printStackTrace();
48 }
49 }
50 }



本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6163585.html,如需转载请自行联系原作者
相关文章
|
4月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
129 0
|
3月前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
2月前
|
IDE API 定位技术
Python--API编程:IP地址翻译成实际的物理地址
Python--API编程:IP地址翻译成实际的物理地址
64 0
|
4月前
|
分布式计算 大数据 Hadoop
揭秘MapReduce背后的魔法:从基础类型到高级格式,带你深入理解这一大数据处理利器的奥秘与实战技巧,让你从此不再是编程门外汉!
【8月更文挑战第17天】MapReduce作为分布式计算模型,是大数据处理的基石。它通过Map和Reduce函数处理大规模数据集,简化编程模型,使开发者聚焦业务逻辑。MapReduce分单阶段和多阶段,支持多种输入输出格式如`TextInputFormat`和`SequenceFileInputFormat`。例如,简单的单词计数程序利用`TextInputFormat`读取文本行并计数;而`SequenceFileInputFormat`适用于高效处理二进制序列文件。合理选择类型和格式可有效解决大数据问题。
77 1
|
4月前
|
JavaScript API 开发者
RESTful API 设计的传奇征程:突破常规,拥抱最佳实践,铸就编程巅峰!
【8月更文挑战第7天】希望通过以上的探讨,能让您对 RESTful API 设计有更深入的理解和认识。
55 5
|
4月前
|
JSON API 数据库
神秘编程力量来袭!Rails 究竟隐藏着怎样的魔力,能构建出强大的 RESTful API?快来一探究竟!
【8月更文挑战第31天】《构建 RESTful API:使用 Rails 进行服务端开发》介绍了如何利用 Ruby on Rails 框架高效构建可扩展的 RESTful API。Rails 采用“约定优于配置”,简化开发流程,通过示例展示了路由定义、控制器设计及模型层交互等内容,帮助开发者快速搭建稳定可靠的服务端。无论小型项目还是大型应用,Rails 均能提供强大支持,提升开发效率。
32 0
|
6月前
|
分布式计算 Hadoop Java
MapReduce编程模型——在idea里面邂逅CDH MapReduce
MapReduce编程模型——在idea里面邂逅CDH MapReduce
95 15
|
6月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
66 1
|
6月前
|
存储 分布式计算 Hadoop
MapReduce编程模型——自定义序列化类实现多指标统计
MapReduce编程模型——自定义序列化类实现多指标统计
54 0
|
6月前
|
机器学习/深度学习 分布式计算 并行计算
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
99 0