Hadoop学习(四)正式运行hadoop(自己写一个WordCount)

本文详细介绍了如何使用Hadoop实现WordCount程序,包括项目整体框架、各组件的功能和代码实现。通过eclipse的Hadoop插件创建项目,涉及到的类包括myMapper、myReducer、myCombiner和myPartitioner。myMapper负责数据拆分,myReducer执行词频统计,myCombiner作为Reducer的本地实现,myPartitioner控制数据分布。此外,还讨论了输入输出路径设置、输出文件处理及运行时可能遇到的问题与解决办法。
摘要由CSDN通过智能技术生成

经过几天的学习,学好了理论,搭建好了环境,终于可以开始动手写代码了,这里为写的就是被誉为hadoop的hello world的WordCount。

在这里我使用了eclipse的hadoop插件来创建hadoop项目,个人比较推荐这种方式,不仅运行测试起来简单,管理HDFS也是非常方便。这里附上一篇hadoop插件的安装教程:https://blog.csdn.net/xummgg/article/details/51173159

一.项目整体框架

在本项目中,共编写了四个类及一个主函数:

myMapper:继承Mapper类,在里面重写了Map方法,主要任务是将输入的每行数据通过split方法以空格分割出每个word,并生成新的k,v对<word,1>输出

myReduer:继承Reducer类,在里面重写Reduce方法,主要任务作是对Map的结果进行排序、合并等操作最后得出词频

myCombiner:继承Combineer类,重写Combine方法,这个相当于Reducer的本地实现,对同一个节点下map输出的结果进行排序合并,可以直接使用myReducer,也可以没有。

myPartitioner:继承Partitioner类,重写getPartition方法,根据不同的key值将mapper后的结果分配到不同的reduce 节点上。

主函数:实例化Job,将上面四个类组合起来并启动Job

二.代码实现

1.myMapper类

public static class myMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
	 public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
		 String line = value.toString();
		 String [] words = line.split(" ");
		 LongWritable one = new LongWritable(1);
		 for(String word:words) {	 
			 context.write(new Text(word),one);
		 }
	 }
}

要点:

  • hadoop的MR中的m和r阶段的kv键值对都需要实现序列化,代码中的LongWriable和Text就是hadoop中实现序列化的数据类型,可以看成是java中的long和string
  • Mapper旁的<>中四个不同数据类型的意思是:前两个代表输入k,v对的类型,因为是&
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值