hadoop模板分析

如下是一个模板。解释在注释里。代码是从网上找的



 1 package hadoop_homework;
 6 import java.util.ArrayList;
 7 import java.io.IOException;
 8 import java.util.Iterator;
 9 import java.util.StringTokenizer;
10 import org.apache.hadoop.conf.Configuration;
11 import org.apache.hadoop.fs.Path;
12 import org.apache.hadoop.io.IntWritable;
13 import org.apache.hadoop.io.LongWritable;
14 import org.apache.hadoop.io.Text;
15 import org.apache.hadoop.mapreduce.Job;
16 import org.apache.hadoop.mapreduce.Mapper;
17 import org.apache.hadoop.mapreduce.Reducer;
18 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
19 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
20 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
21 import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
22 import org.apache.hadoop.util.GenericOptionsParser;// 这行以上的东西基本都是差不多的。
23 public class wordCount{
24     public static class Map extends
26             Mapper<LongWritable, Text, Text, IntWritable> {      /*前两个参数基本不用管,有的程序是把LongWritable改为Object。后两个是map产生的那些个对的两个值。这里的意思是(Text, IntWritable)本map程序产生的是      key值是Text类型,value是IntWritable类型的。这里可以改类型。如果不嫌麻烦,可以都改成Text,反正数字转字符串      或者反过来,都不过是一个方法的问题而已。      */28
29         public void map(LongWritable key, Text value, Context context)
30                 throws IOException, InterruptedException {      /*这里的map函数基本就可以理解为获取文件里的每一行。基本上算是吧。      前两个参数要注意和第26行那里匹配。*/
32             String line = value.toString();
33         /*基本上第一句话都是这个。是每一次从文件里获取的那一行。*/      /*从这句话开始,你就可以以line为原材料,开始编辑自己的逻辑了*/                    context.write(new Text(""), new IntWritable(1));        /*map的输出,也就是结果的记录。注意,这里的write方法参数要和26行的匹配。*/
51         }
52     }
53
54     public static class Reduce extends
57             Reducer<Text, IntWritable, Text, IntWritable> {       /*前两个是从前面来的context输入的格式,后两个是此次context输出的格式。基本可以这么认为*/

58
59         public void reduce(Text key, Iterable<IntWritable> values,
60                 Context context) throws IOException, InterruptedException {        /*和map差不多。*/

61             Iterator<IntWritable> iterator = values.iterator();        /*iterator里的东西,是同一个key的所有组合的value值。所以要用迭代器来遍历里面的东西*/63             while (iterator.hasNext()){          /*这里可以有自己的逻辑,比如累加啊之类的。*/65             }

        /*遍历完了之后还可以根据需要进行操作。*/         
66             context.write(key, new IntWritable(sum));        /*和map方法一样。reduce的write输入,如果重复了的(。。。,。。。)组合会被去掉,所以可以用来去重。*/                /*        从61行到66行,也可以用for(IntWritable t : values){     /*逻辑*/}来遍历          */
67
68         }
69     }
70     public static void main(String[] args) throws Exception {
71         Configuration conf = new Configuration();
72         /*以下代码几乎都是照搬的,每次都要小小地修改一下。具体道理我也不是太懂。照搬就好*/
73         conf.set("mapred.job.tracker", "localhost:9000");
74         String[] ioArgs = new String[] { "score_in", "score_out1" };/*这里是输入文件夹和输出文件夹的位置。都是本地的。*/
75         String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs();
76         if (otherArgs.length != 2) {
77             System.err.println("Usage: Score Average <in> <out>");
78             System.exit(2);
79         }
80         Job job = new Job(conf, "Score Average");
81         job.setJarByClass(friendCount.class);
82         // 设置Map、Combine和Reduce处理类
83         job.setMapperClass(Map.class);
84         job.setCombinerClass(Reduce.class);
85         job.setReducerClass(Reduce.class);/*这里的combiner可以不止一个。combiner我感觉一般是跟reducer一样的,就当是一次                            reduce不完的东西,多次来reduce。所以一个程序不是只能有一个map和一个reduce两个类,                            完全可以有更多。看需要吧。*/
86         // 设置输出类型
87         job.setOutputKeyClass(Text.class);
88         job.setOutputValueClass(IntWritable.class);/*这俩要和最终reducer匹配*/
89         // 将输入的数据集分割成小数据块splites,提供一个RecordReder的实现
90         job.setInputFormatClass(TextInputFormat.class);
91         // 提供一个RecordWriter的实现,负责数据输出
92         job.setOutputFormatClass(TextOutputFormat.class);
93         // 设置输入和输出目录
94         FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
95         FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
96         System.exit(job.waitForCompletion(true) ? 0 : 1);
97     }
98 } 

 
时间: 2024-10-15 15:03:33

hadoop模板分析的相关文章

利用leaks模板分析app的内存泄露

虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要. 这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用. 本文假设你已经比较熟悉Obj-C的内存管理机制. 实验的开发环境:XCode 4.5.2 1.运行Demo. 先下载一个实现准备好的内存泄露的Demo吧:leak app 下载下来,打开运行,程序是一个寿司的列表,列出各种寿司卷.试着选择里面的几行,应

hadoop 编程规范(hadoop专利分析)

网上有很多hadoop例子,但是不难发现,即使是一个wordcount都有很多不一样的地方,我们不可能总拿着别人的例子跑,所以自己要总结出一套规范,让api即使更新也能马上适应过来.这里也以hadoop 专利分析作为炮灰 右键新建map/reduce项目,然后点击项目右键Mapper,Reducer,MapperReduce Driver 并且在MapperReduce Driver 里填上刚才新建的Mapper,Reducer的类名,建好后,并修改 MapperReduce Driver里的路

Hadoop源代码分析(完整版)-转载

Hadoop源代码分析(一) http://blog.csdn.net/huoyunshen88/article/details/8611629 关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.h

Hadoop源代码分析(MapTask辅助类 I)

Hadoop源代码分析(MapTask辅助类 I)MapTask的辅劣类主要针对Mapper的输入和输出.首先我们来看MapTask中用的的Mapper输入,在类图中,返部分位于右上角.MapTask.TrackedRecordReader是一个Wrapper,在原有输入RecordReader的基础上,添加了收集上报统计数据的功能.MapTask.SkippingRecordReader也是一个Wrapper,它在MapTask.TrackedRecordReader的基础上,添加了忽略部分输

hadoop日志分析

一.项目要求 本文讨论的日志处理方法中的日志,仅指Web日志.其实并没有精确的定义,可能包括但不限于各种前端Web服务器--apache.lighttpd.nginx.tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志. 二.需求分析: KPI指标设计 PV(PageView): 页面访问量统计 IP: 页面独立IP的访问量统计 Time: 用户每小时PV的统计 Source: 用户来源域名的统计 Browser: 用户的访问设备统计 下面我着重分析浏览器统计 三.分析过程

使用hadoop mapreduce分析mongodb数据

使用hadoop mapreduce分析mongodb数据 (现在很多互联网爬虫将数据存入mongdb中,所以研究了一下,写此文档) 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 一. mongdb的安装和使用 1. 官网下载mongodb-linux-x86_64-rhel70-3.2.9.tgz 2. 解压 (可以配置一下环境变量) 3. 启动服务端 ./mongo

使用hadoop mapreduce分析mongodb数据:(2)

在上一篇使用hadoop mapreduce分析mongodb数据:(1)中,介绍了如何使用Hadoop MapReduce连接MongoDB数据库以及如何处理数据库,本文结合一个案例来进一步说明Hadoop MapReduce处理MongoDB的细节 原始数据 > db.stackin.find({}) { "_id" : ObjectId("575ce909aa02c3b21f1be0bb"), "summary" : "go

Hadoop源代码分析

关键字: 分布式云计算 Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算设施. GoogleCluster:http://research.google.com/archive/googlecluster.html Chubby:http://labs.google.com/papers/chubby.html GFS:http://labs.google.com/papers/gfs.html BigTable:http://labs.googl

Hadoop源代码分析(MapReduce概论)

大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花很多的时间去介绍HDFS的背景,毕竟大家对文件系统的还是有一定的理解的,而且也有很好的文档.在分析Hadoop的MapReduce部分前,我们还是先了解系统是如何工作的,然后再进入我们的分析部分.下面的图来自http://horicky.blogspot.com/2008/11/hadoop-mapreduce-implementation.html,是我看到的讲MapReduce最好的图. 以Hadoop带的wordcount为例子(下面