Gora + MapReduce,大数据持久化,遍历

需要源码请QQ联系,或留言


【参考文档】

       http://developer.yahoo.com/hadoop/tutorial/module4.html#basics

       《[Hadoop权威指南].(Hadoop.The.Definitive.Guide).Tom.White.扫描版.pdf》

       http://blog.csdn.net/yiboo/article/details/7321063

       http://www.iteye.com/topic/709986

       http://blog.csdn.net/anbo724/article/details/6955175

 

 

【参考工程】

MyGoraMapReduce

 

【Hadoop - MapReduce工作机制】

       MapReduce源于Nutch。现在MapReduce完全移至到Hadoop上,并且改进。

       所以,现在无论Nutch、Gora,中的MapReduce都是依赖于Hadoop的MapReduce进行扩展。入门先从Hadoop的MapReduce开始了解。

      

       简单描述:

       InputFormat(准备数据,可以是文件、Gora数据库来源)  -> Split(拆分文件)  ->  RecordReader(map输出时的key值)  ->  Map(分类,提交)  ->  Partition(分区,调度器)  ->  Sort(二次排序,RawComparator,比较器,影响Reduce中<key,value>,比较相同,Reduce中Key相同,Values+1)  ->  Reduce(处理,略)  ->  OutputFormat(输出)  ->  End

 

在map阶段:

       使用job.setInputFormatClass定义的InputFormat将输入的数据集分割成小数据块splites,同时 InputFormat提供一个RecordReder的实现。本例子中使用的是TextInputFormat,他提供的RecordReder会将文 本的一行的行号作为key,这一行的文本作为value。这就是自定义Map的输入是<LongWritable, Text>的原因。然后调用自定义Map的map方法,将一个个<LongWritable, Text>对输入给Map的map方法。注意输出应该符合自定义Map中定义的输出<IntPair, IntWritable>。最终是生成一个List<IntPair,IntWritable>。在map阶段的最后,会先调用job.setPartitionerClass对这个List进行分区,每个分区映射到 一个reducer。每个分区内又调用job.setSortComparatorClass设置的key比较函数类排序。可以看到,这本身就是一个二次 排序。如果没有通过job.setSortComparatorClass设置key比较函数类,则使用key的实现的compareTo方法。在第一个 例子中,使用了IntPair实现的compareTo方法,而在下一个例子中,专门定义了key比较函数类。 

在reduce阶段:

       reducer接收到所有映射到这个reducer的map输出后,也是会调用 job.setSortComparatorClass设置的key比较函数类对所有数据对排序。然后开始构造一个key对应的value迭代器。这时就 要用到分组,使用jobjob.setGroupingComparatorClass设置的分组函数类。只要这个比较器比较的两个key相同,他们就属 于同一个组,它们的value放在一个value迭代器,而这个迭代器的key使用属于同一个组的所有key的第一个key。最后就是进入Reducer 的reduce方法,reduce方法的输入是所有的(key和它的value迭代器)。同样注意输入与输出的类型必须与自定义的Reducer中声明的 一致。 

 

 

【主要目录,功能】

基于Gora中MapReduce进行扩展。

       com.suntang.mapreduce.*   --自定义MapReduce各类。

              MyComparator.java     --比较器,影响Reduce线程Key,Value。

              MyGoraMapper.java    --Map,数据分类

              MyGoraReducer.java    --Reduce,处理,输出

      

       com.suntang.testmapreduce.*   --测试类,Hadoop进行分布式计算接口。Ha

              MapReduceRun.java     --利用Hadoop分布式,程序入口。需要extends Configuredimplements Tool

              MapReduceTest.java      --单元测试类

 

【MyComparator.java】

       比较器。Compare()方法,目前使用比较文件大小。如果返回值相同,由同一个Reduce处理。

 

【MyGoraMapper.java】

       Map。Map()方法,将InputFormat的数据进行归类。Key-Value进行归类。

 

【MyGoraReducer.java】

       Reduce。Reduce()方法,将Compare()后比较结果,进行处理。

 

【MapReduceRun.java】

       Hadoop分布式,程序入口。需要extends Configuredimplements Tool

       run()方法,配置各MapReduce。

       Main()方法,程序入口,需要调用run()方法。

 

【MapReduceTest.java】

       MapReduce单元测试。

 

 

【Hadoop分布式启动】

1.      配置并启动Hadoop环境。

2.      将工程所需要的lib、配置文件导入到,hadoop\lib\和\conf\下。

3.      命令:hadoop jar jar文件 被调用类全路径。

       例:hadoop jar MyMapReduce.jarcom.suntang.testmapreduce.MapReduceRun

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值