尼玛,好坑呀!
昨天遇到的问题原来是找错包了,那个Step1Mapper.class 同时在mahout-core-0.7.jar mahout-core-0.7-job.jar mahout-examples-0.7-job.jar 三个包中,但是用到的只是mahout-core-0.7.jar中的Step1Mapper.class,所以只用替换mahout-core-0.7.jar中相应的文件即可。出来的结果如下:
可以看到这里的partition已经变成了0了,这个值是在哪里设置的?
Step1Mapper中log的设置如下:
protected void setup(Context context) throws IOException, InterruptedException { log.info("in setup() before super.setup() partition : {}", context.getConfiguration().getInt("mapred.task.partition", -1)); super.setup(context); Configuration conf = context.getConfiguration(); log.info("in setup() after super.setup() partition : {}", conf.getInt("mapred.task.partition", -1)); configure(Builder.getRandomSeed(conf), conf.getInt("mapred.task.partition", -1), Builder.getNumMaps(conf), Builder.getNbTrees(conf)); }可以看到我在setup函数刚进来的时候还没有执行super.setup的时候mapred.task.partition就已经被赋值了,这点如何说明?
看PartialBuilder,我在PartialBuilder中加入了下面的语句:
protected void configureJob(Job job) throws IOException { Configuration conf = job.getConfiguration(); log.info("in PartialBuilder configureJob() partition : {}", conf.getInt("mapred.task.partition", -1)); job.setJarByClass(PartialBuilder.class); FileInputFormat.setInputPaths(job, getDataPath()); FileOutputFormat.setOutputPath(job, getOutputPath(conf)); job.setOutputKeyClass(TreeID.class); job.setOutputValueClass(MapredOutput.class); job.setMapperClass(Step1Mapper.class); job.setNumReduceTasks(0); // no reducers job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(SequenceFileOutputFormat.class); }这里是设置Job的和conf的,我在conf不会变的情况下,读取了它的值,如下:
可以看到这个值还是没有设置的,如果设置的话不应该读到-1。
所以得到的结论就是Job提交之前conf没有设置mapred.task.partition的值,但是刚提交,在Mapper的第一个运行函数setup中就可以读取conf的mapred.task.partition的值了,这是神马情况?难道其他地方还有设置这个值的?好吧,我搜搜看:
尼玛,还真有。除了mahou里面的,hadoop里面也有三个类含有这个值:FileOutputFormat、IsolationRunner、Task。这三个中只有Task最像是设置mapred.task.partition的值的类。Task:任务。好吧,应该就是这里设置了这个值了。好吧,我为啥老是追着这个值不放?因为我编写Step1Mapper 的仿制代码的时候需要这个值,而我又不知道这个值是多少,坑爹呀。昨天就应该知道的,结果替换错了.class文件了。算了,不纠结这个变量值了,知道了就好。如果真要追究的话,应该要涉及到hadoop的执行原理了吧。
分享,成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990