最近我们team做了一个推荐系统,整个系统分为算法和平台两部分,而算法又分为hive sql算法和map reduce算法,因此,近几个月都在学这些东东,感觉分布式的计算还是蛮强的,hive就不说了,这里把map reduce的入门例子记录一下入门过程。
一.编写main方法
package com.taobao.aladdin.biz.core.mapreduce.test;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
/*
*@author huangdou
*created on 2011-4-1下午03:20:11
*/
public class WordCount2 {
public static void main(String[] args) throws Exception {
//不配置一个入口类会导致底层无法调用setJarByClass方法,运行时ClassNotFound
JobConf conf = new JobConf(WordCount2.class);
//设置map类
conf.setMapperClass(WordCountMapper.class);
//设置reduce类
conf.setReducerClass(WordCountReducer.class);
//设置输出类型
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
//输入参数除最后一个外都是input path,最后一个是output path
for (int i = 0; i < args.length - 1; i++) {
FileInputFormat.addInputPath(conf, new Path(args[i]));
}
FileOutputFormat.setOutputPath(conf, new Path(args[args.length - 1]));
JobClient.runJob(conf);
}
}
二.编写Map方法,输入来自文件.
package com.taobao.aladdin.biz.core.mapreduce.test;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;
/*
*@author huangdou
*created on 2011-4-1上午10:50:54
*/
public class WordCountMapper extends MapReduceBase implements
Mapper<LongWritable, Text, Text, IntWritable> {
private IntWritable one = new IntWritable(1);
@Override
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
//StringTokenizer 就是一个用来拆字符串的,默认是/t/n/f/r,也可自定义
StringTokenizer st = new StringTokenizer(value.toString());
Text text = new Text();
while (st.hasMoreTokens()) {
text.set(st.nextToken());
//把每个单词以1记数
output.collect(text, one);
}
}
}
其实map的输入来源就是input path指定的文件
三.编写Reduce方法,输入来自Map,输出即为最终结果
package com.taobao.aladdin.biz.core.mapreduce.test;
import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
/*
*@author huangdou
*created on 2011-4-1上午10:51:53
*/
public class WordCountReducer extends MapReduceBase implements Reducer<Text,IntWritable,Text,IntWritable>{
@Override
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
Integer sum = 0;
while (values.hasNext()){
//map的输出其实会在每一个map中汇总,即同一个map如果出现"word"2次,那么map的输出就是word 2
//然后在进入reduce前会进行一个排序,即各个map的word统计会排在一起,同key的结果进入同一个reduce
sum += values.next().get();
}
//最终结果
output.collect(key, new IntWritable(sum));
}
}
四.安装hadoop
hadoop可以在本地windows装个测试环境,不过是单机的,也可以直接使用公司的集群,至于安装我下1篇再写,这里直接用公司的吧,但要先把文件传上去。rz,选择文件
五.编译该java文件
因为编译的时候需要用hadoop下的包,所以这里classpath打一下hadoop的core包,这个core包其实就在你的hadoop安装路径下。 我这里是javac -classpath /home/hadoop/hadoop-0.19.2/hadoop-0.19.2-core.jar -d . *.java ,编译完后,当前目录会出现一个com包
六.打成jar文件
jar -cvf wc14.jar com/ 打包后会出现一个wc.jar文件
七.运行map reduce
进入hadoop的bin目录下,运行.
这里需要说一下,我第一个main方法里写过,最后一个参数是输出路径,而前面的多个参数都是输入路径,因此命令如下:
./hadoop jar wc14.jar com.taobao.aladdin.biz.core.mapreduce.test.WordCount2 /group/aladdin/huangdou/huangdou1.txt /group/aladdin/huangdou/huangdou2.txt /group/aladdin/huangdou/huangdou14
这里huangdou1.txt和huangdou2.txt都是input path,而huangdou3为output path,值得注意的是,huangdou3只是一个路径,在它的下面存在一些文件碎片,这个碎片才是最终结果,可以查看一下。
./hadoop dfs -cat /group/aladdin/huangdou/huangdou3/part-00000
八.最后,如果下次还要运行这个map reduce,需要把原来的huangdou3这个路径干掉,否则会提示输出路径已存在的异常
分享到:
相关推荐
Python入门Demo-WordCount,Python入门Demo-WordCount
Community Detection inOnline Social Networks大数据大中小数据集所对应的mapreduce代码
hadoop入门例子wordcount
GPU上实现Map-Reduce的框架 可以进一步实现各种机器学习
hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计
博客配套文件,详细讲述了WordCount的map和reduce过程,给出了详细注释和解释,便于快速学习。
讲解map-reduce模型(以wordcount为例)
hadoop入门程序,非常的详细,有什么不懂可以给我留言 。欢迎咨询
要求应用 map-reduce 思想,模拟 9 个 map 节点与 3 个 reduce 节点实现 wordCount 功能,输出对应的 map 文件和最终的 reduce 结果文件。由于源文件较大,要求使用多线程来模拟分布式节点。 学有余力的同学可以在 ...
map-reduce-html 有用的Map Reduce功能集合,可深入了解HTML文档 程序和输出 字数 跑步 -- Using the provided shell script $ ./run.sh WordCount -- Running it on your own $ hadoop jar /usr/lib/hadoop-...
亲自测试的
Hadoop 用mapreduce实现Wordcount实例,绝对能用
hadoop wordcount2.0 包含省略标点,忽略大小写等内容
这是一个wordcount的一个简单实例jar包,仅仅用来做测试。...map类:org.apache.hadoop.wordcount.WordCountMapReduce$WordCountMapper reduce类 org.apache.hadoop.wordcount.WordCountMapReduce$WordCountReducer
【大数据入门笔记系列】第五节 SpringBoot集成hadoop开发环境(复杂版的WordCount)前言环境清单创建SpringBoot项目创建包创建yml添加集群主机名映射hadoop配置文件环境变量HADOOP_HOME编写代码添加hadoop依赖jar包...
wordcount程序运行过程分析与应用。工作流程。。。。。。
javawordcount
包含配置hadoop过程中遇到的一些问题的解决办法和成功运行wordcount实例的步骤
storm-wordcount例子 storm-wordcount例子 storm-wordcount例子 storm-wordcount例子
hadoop wordcount 打包部署