对于JOB的FormatClass方法疑问
job.setInputFormatClass和setOutputFormatClass,小弟乱了,求详细解释map、combiner、reduce之间输入、输出参数关系,谢谢第一个问题
如下面:
// 对输入数据进行格式化处理的类
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,便是统计单词有多少个。
多谢,Output基本了解,回头详细实验一下Format就OK了 完全是个人理解,直供参考
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有些初步理解,希望高手补充
遗留问题待补充 学习了~~~~~~~~ {:soso_e194:}
页:
[1]