分享

对于JOB的FormatClass方法疑问

evababy 发表于 2014-11-28 09:47:54 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 8776
job.setInputFormatClass和setOutputFormatClass,小弟乱了,求详细解释map、combiner、reduce之间输入、输出参数关系,谢谢

已有(5)人评论

跳转到指定楼层
sstutu 发表于 2014-11-28 10:36:16

第一个问题

如下面:

// 对输入数据进行格式化处理的类
job.setInputFormatClass(TextInputFormat.class);



// 指定map输出类型<key,value>类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);

其实就是对数据类型的控制,比如哦输入数据,要求你输入字符串,那么就是TextInputFormat,如果输出长整型就是LongWritable。




对于输出类型同样也是。这个暂时不理解不要紧,暂时记住,多写几个mapreduce、然后对hadoop数据类型有一定的认识自然明白了。




hadoop编程基础:数据类型介绍及与Java数据类型之间转换

hadoop的数据类型text是什么?
案例可以参考下面:

MapReduce初级案例(1):使用MapReduce去重


MapReduce初级案例(2):使用MapReduce数据排序


MapReduce初级案例(3):使用MapReduce实现平均成绩



第二个问题

首先你需要有一定的了解。
这方面的资料很多,

彻底了解mapreduce核心Shuffle--解惑各种mapreduce问题

mapreduce学习指导及疑难解惑汇总

只有对上面有所了解之后,或许下面我说的内容,你就能明白。



map是对输入数据的分割
combiner,可以有,也可以没有,也就是说是你选择的,它可以认为是本地的reduce,说的可能还是不懂,
多个map可能对应一个reduce。但是reduce接受map的数据太多了,导致他干的活有点多,比如reduce要排序,那么我在map中,提前排序,这样我在reduce进行排序的时候,就能少干点活。

reduce英语的意思就是规约,是对数据的处理。比如典型的wordcount,便是统计单词有多少个。






回复

使用道具 举报

evababy 发表于 2014-11-28 11:25:32
多谢,Output基本了解,回头详细实验一下Format就OK了
回复

使用道具 举报

evababy 发表于 2014-12-16 16:39:02
完全是个人理解,直供参考
outputclass可作为全局输出类型的声明,不是必须声明,其中可包含mapoutputclass.而mapoutputclass只能作为map输出的声明,一般情况下必须声明mapoutputclass。

outputclass与mapoutputclass基本定位为Mapper、Combiner、Partitioner、Reducer四个阶段输出类型的声明。(由于mapper有自己的声明,那么其他三个阶段输出参数必须保持一致?)

注:使用声明而不是对象,是由于采用了分布式方式,无法实现对象的分布式处理,声明也是分布式的经典方式之一。

而inputformat和outputformat则是对全局的输入输出格式化(处理)
inputformat暂时只想到对mapper的输入有效,例如:编写format实现类,完成非HDFS文件的输入,吧数据传递给mapper。

outputformat应该使用与4个阶段的输出,例如:任何阶段都可以直接输出到非HDFS系统,或对输出结果的处理。(如果同时存在4个阶段,具体的ouputformat的工作原理?对那个阶段有效?)

本人是针对MapReduce DP 第7张的学习,对input和output有些初步理解,希望高手补充
遗留问题待补充
回复

使用道具 举报

cochou 发表于 2014-12-16 22:59:42
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条