大家好,第二次作业的成绩已经发布在课程网站。
当年我学这门课的时候也是从零开始学习java和hadoop,所以我很理解大家无从下手的迷茫和调试的痛苦。
建议大家注意休息,不要老熬夜,在运行程序的时候多去室外转转,转换一下心情。
一定要善用搜索引擎,很多程序报的错误或者不明白的问题一搜网上就有解决方案。
虽然我理解很多同学无从下手的心情,但我觉得直接抄网上代码没有任何意义。
请大家借用别人代码时,注意给出引用(网上的链接/同学的姓名),并且做出必要的修改。
这次作业抄代码而不给出reference的行为不少,我标记了一些特别明显的作为警示,没有扣分,标记下来给老师以后算分数时做参考。
评分标准定的比较细,是为了用心做了作业的人能够得到不错的分数,
不过人工难免会有错,如果评分相关有任何疏漏/疑问请尽管给我发邮件。
最后看了大家的报告之后随便说一些常见问题吧:
1. AP集Pair方法要达到5分钟之内是不难的,使用combiner,外加设置多个reducer,其他细节注意一点即可。
2. mapper的输出/reducer的输入的key必须实现WritableComparable接口,Value必须实现Writable接口。实现的时候在类名后面加上implements xxx,eclipse就会告诉你需要实现什么接口的。
3. 最常见的bug:java的容器里的变量都是引用,所以向容器里添加东西的时候要new一个,而不能用同一个修改后反复添加,否则最后容器里都指向同一个元素。
4. 代码里涉及多个String的连接的时候一定要用StringBuffer或StringBuilder,否则会非常非常非常非常慢。
5. Stripe方法reduce很慢/超时/超内存,可能是上面所说Stripe转String时用了加号而没有用StringBuffer,也可能是recuder中没有及时清空用来累计临时结果的stripe。
认真的孩子们请继续加油吧,一切努力都不会白费的~
助教: 李睢