基于Hadoop的第二个分布式算法Day1-2

 第二个基于Hadoop的分布式算法开发,遇到和第一个算法不一样的小问题:

 前提如下:本程序希望写成多Mapreduce迭代运行的形式,http://blog.csdn.net/shennongzhaizhu/article/details/51918924,尝试这个博客的第一种方法

 1.用yarn模式跑的时候,发现任务号不是job_xxxx,而是appattempt_xxxx这种前缀,原来这是yarn任务的前缀,那就不是我debug的重点。

 2.在本机跑yarn模式电脑风扇一直呼呼的,log显示一直在跑采样的SQL,我推测有俩原因,一是抽样总是重复所以一直抽样跳不出去,二是算法要求的精度太高跑不出来了,第二个没有感觉,但是第一个好改,于是注释掉判断是否该样本已经抽取过的代码,也就是无放回采样改为有放回采样,果然好了,跑完了。但是结果是空,reduce里的context.write没问题,那就应该是前面的代码出错导致context.write没执行到,再看一遍前面的代码,总之很奇葩因为map的context.write忘写了……看来是map没有输出所以就没跑reduce。加上以后再跑,结果任然不如人意,看着控制台的输入,是这样一种现象,我在Input目录下放了12个文件,每个文件有三行信息,我以为会有12个map,现在却是每行执行一个map函数(说到这我想起来yarn模式还有问题,因为appattempt这个前缀不会输出map几个reduce几个的信息,有问题),然后baidu看博客,纠正了一下概念,map函数的输入参数value就是文件的一行,于是我把信息都写在一行里用分号间隔,跑一遍,12个map了,但是还有一个现象,每个map后面跟着两个reduce,第一个问题是全局应该只有一个reduce,第二个问题是居然跟着两个reduce都不是一个,显然不是控制reduce个数的问题,那么想了一下第二个现象,想起combiner和reducer用都是reduce类,于是注释掉job.setCombinerClass,居然,全局都好了,莫名其妙。

 3.一开始报了个java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///这个错,显然是HDFS的问题,是我忘记把对fs.defaultFS和yarn.resourcemanager.hostname的设置(conf.set)打开了,所以它没找到HDFS。

 4.throws和try catch的区别(多么经典的面试题!),我在reduce写了几个System.out.println,发现程序只跑了一部分,那就说明中间代码出错中止了,改了几版还是不太顺利才重视控制台没有抛出异常的麻烦,reduce函数只有throws IOException, InterruptedException也就是throws 这种异常抛出,http://blog.csdn.net/luoweifu/article/details/10721543,这个博客还行,提了下好的异常抛出习惯,不管JVM或者上层如何处理throws抛出的异常,不经我处理,它就是没输出我当前的控制台上!所以我try catch了整个方法体,控制台终于告诉我错哪了微笑






扫描二维码关注公众号,回复: 5591542 查看本文章

猜你喜欢

转载自blog.csdn.net/xerjava/article/details/78357503
今日推荐