Hadoop WordCount详细分析

2024-06-15 01:38

本文主要是介绍Hadoop WordCount详细分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;public class WordCount{整型:IntWritable, 这是Hadoop对int的封装字符串型:Text,这是Hadoop对String的封装LongWritable long的类型封装public static class TokenizerMapper extends Mapper<LongWritable, Text, Text, IntWritable> {private final IntWritable one = new IntWritable(1); new一个int类型  用来计数,这里是1,private Text word = new Text();  new一个string类型   这是定义两个数据类型public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{key值为该行的首字符相对于文本文件首字符的偏移量value值存储的是文本文件中的一行Context,上下文对象,它用来与MapReduce系统进行通信,如把map的结果传给reduce处理StringTokenizer itr = new StringTokenizer(value.toString());  StringTokenizer类是将每一行拆分为一个个的单词while (itr.hasMoreTokens())  用来判断当前还有没有可以遍历的元素 遍历一下每行字符串中的单词{word.set(itr.nextToken());//打印下一个字段或者元素 //出现一个单词就给它设成一个key并将其值设为1context.write(word, one); 增加一个(k,v)对到context 用context.write(key,value)来传递数据one这里是1,所以,输出的(key,value)->(word, one)都是这样的形式:(“单词”,1)。可供之后处理。//输出设成的key/value值}}}public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> 
{private IntWritable result = new IntWritable();reducer将中间输出键值对中那些键相同的合并(内部已经把上面map阶段相同的key进行了合并),值为集合。一个key对应一组value在reduce阶段,每个key传进来,reduce方法都被调用一次传进来的键值对的形式是<key,>,即value不是一个值,而是值的集合。用一个for循环,即可遍历某个key里面的所有值:public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{int sum = 0;这个for循环将某个key对应的所有的value累加,即某单词出现次数的累加/由于map的打散,这里会得到如,{key,values}={"hello",{1,1,....}},这样的集合for (IntWritable val : values) {sum += val.get(); //这里需要逐一将它们的value取出来予以相加,取得总的出现次数,即为汇和}result.set(sum);context.write(key, result); context.write(key,result)就把某单词出现的次数输出了 result是单词的次数}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = new Job(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
----------------------------------------------------------------------------------------------------------
  Configuration conf = new Configuration();  //取得系统的参数
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();  
if (otherArgs.length != 2) {               
//判断一下命令行输入路径/输出路径是否齐全,即是否为两个参数
System.err.println("Usage: wordcount <in> <out>");  
System.exit(2);                           //若非两个参数,即退出
}  
Job job = new Job(conf, "word count");      
//此程序的执行,在hadoop看来是一个Job,故进行初始化job操作
job.setJarByClass(Wordcount.class);        
//可以认为成,此程序要执行MyWordCount.class这个字节码文件
job.setMapperClass(TokenizerMapper.class); 
//在这个job中,我用TokenizerMapper这个类的map函数
job.setCombinerClass(IntSumReducer.class);  
job.setReducerClass(IntSumReducer.class);   
//在这个job中,我用IntSumReducer这个类的reduce函数 
job.setOutputKeyClass(Text.class);          
//在reduce的输出时,key的输出类型为Text
job.setOutputValueClass(IntWritable.class);  
//在reduce的输出时,value的输出类型为IntWritable
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));  
//初始化要计算word的文件的路径
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 
//初始化要计算word的文件的之后的结果的输出路径 
System.exit(job.waitForCompletion(true) ? 0 : 1);
//提交job到hadoop上去执行了,意思是指如果这个job真正的执行完了则主函数退出了,若没有真正的执行完就退出了。  
} 
}

这篇关于Hadoop WordCount详细分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062068

相关文章

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

Hadoop简介_Hadoop集群_Hadoop安装配置

Hadoop集群(第5期)_Hadoop安装配置   1、集群部署介绍   1.1 Hadoop简介     Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透

转:Hadoop学习与安装

学习目标: 使用Hadoop分布式系统(HDFS)来海量存储数据集,通过MapReduce堆这些数据集运行分布式计算 熟悉Hadoop的数据和IO组件,用于压缩、数据集成、序列化和持久处理 熟悉编写MapReduce实际应用时的常见陷阱和高级特性 设计、勾践和管理一个专用的Hadoop集群或在云上运行Hadoop 使用高级查询语言Pig来处理大规模

在Linux(CentOS6.2)服务器上配置hadoop时遇到的一些问题以及一些解决办法

配置Hadoop时,注意,修改了配置文件后要先停止(stop-all.sh)后再开始运行(start-all.sh),如果不这样,当你在master时就会出现找不到某些datanode的情况,执行hadoop dfsadmin -report时datanode节点的信息状态就不会被发现(记住每个都要启动包括master和slave),这些命令在/usr/hadoop/bin下面,可以通过cd /u

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记,有些图是自己理解画的,可能不正确,可以作为参考,有疑问的地方请直接指出,共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题。 Hadoop发展历史 创始人:Doug Cutting 开发原由:实现与Google类似的全文搜索功能,在Lucene框架基础上进行优化升级,查

从工具产品体验对比spark、hadoop、flink

作为一名大数据开发,从工具产品的角度,对比一下大数据工具最常使用的框架spark、hadoop和flink。工具无关好坏,但人的喜欢有偏好。 目录 评价标准1 效率2 用户体验分析从用户的维度来看从市场的维度来看从产品的维度来看 3 用户体验的基本原则成本和产出是否成正比操作是否“人性化” 4. 功能性与用户体验评估总而言之 大数据框架评估用户视角效率示例代码Spark:计算Pi的近似值F

Hadoop archive

Index of /dist/hadoop/commonhttps://archive.apache.org/dist/hadoop/common/

转--Hadoop集群部署案例

模块简介 本模块主要练习Hadoop集群部署。 模块知识 ● 使用Linux基础命令 ● Hadoop集群搭建部署知识 环境准备 三台CentOS7操作系统的虚拟机 可以是3个Docker容器,也可以是三个VMWare/VirtualBox的虚拟机。三台虚拟机的最低配置为1核1G + 20G。如果是虚拟机中的Docker容器环境,则无需按照以下方式配置主机名和IP。若是按照《[选修]基于

高性能并行计算华为云实验二:WordCount算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建wordcount源码 3.1.1 实验说明 3.1.2 文件创建 3.2 Makefile文件创建与编译 3.3 主机配置文件建立与运行监测 3.3.1 主机配置文件建立 3.3.2 运行监测 三、实验结果与分析 4.1 实验结果 4.2 结果分析 4.2.1 原始结果分析 4.2.2 改进后的结果分析

期货交易豆粕品种详细分析

文章目录 1、豆粕期货标准(2024年6月22号数据)2、豆粕是什么3、豆粕1、5、9合约区别4、影响豆粕的价格因素1、大豆的供应情况。2、豆粕的季节性3、油粕比(豆油和豆粕的价格关系 ) 5、美国大豆的生产/库存炒作6、豆粕双方,喜欢什么样的炒作题材 开始详细的了解一些品种,以及一些品种之间的关联性。 1、豆粕期货标准(2024年6月22号数据) 根据上面的交易单位