Hadoop MapReduce实现PageRank时javac编译权限被拒如何解决
问题解决方案
1. 编译权限报错解决
报错原因:从目录权限信息显示,pagerank_classes目录的属主是root,当前执行javac命令的用户是hduser,没有该目录的写入权限,因此无法生成class文件。
解决步骤:
- 执行命令修改目录属主为当前用户:
sudo chown -R hduser:hadoop /home/hduser/pagerank/pagerank_classes - 权限修改完成后,重新执行原javac编译命令即可。
2. 弃用API警告解决
警告原因:代码中使用的new Job()构造方法在新版本Hadoop中已被标记为弃用,因此编译时会触发警告。
解决步骤:
修改代码中getNewJob方法的实现,将new Job()替换为官方推荐的Job.getInstance():
private static Job getNewJob(int i) throws IOException { // 替换弃用的new Job()构造方法 Job job = Job.getInstance(); job.setJobName("Page Rank "+ String.valueOf(i)); return job; }
补充潜在运行问题修复
代码中PageRankMapper和PageRankReducer是PageRank的非静态内部类,静态main方法中无法直接正确加载这两个类,即使编译通过运行时也会报错,需要给两个内部类加上static修饰:
// 增加static修饰 public static class PageRankMapper extends Mapper<LongWritable, Text, Text, Text> // 增加static修饰 public static class PageRankReducer extends Reducer<Text, Text, Text, Text>
内容的提问来源于stack exchange,提问作者Yesh Jadav
相关产品推荐
相关产品推荐

