在配置好Hadoop Eclipse plugin 连接成功后,提交作业时会抛出下面异常:
2013-10-31 9:38:04 org.apache.hadoop.security.UserGroupInformation doAs 严重: PriviledgedActionException as:admin cause:java.io.IOException: Failed to set permissions of path: \home\hadoop\tmp\mapred\staging\admin-454528829\.staging to 0700 Exception in thread "main" java.io.IOException: Failed to set permissions of path: \home\hadoop\tmp\mapred\staging\admin-454528829\.staging to 0700 at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:689) at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:662) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:509) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:344) at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:189) at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:116) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:918) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:912) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:912) at org.apache.hadoop.mapreduce.Job.submit(Job.java:500) at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530) at com.chenzehe.hadoop.action.WordCount.main(WordCount.java:86)
网上有些人的解决方法是把该异常的代码注释掉,如下:
这个是Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。 解决方法是,修改/hadoop-1.0.2/src/core/org/apache/hadoop/fs/FileUtil.java里面的checkReturnValue,注释掉即可(有些粗暴,在Window下,可以不用检查): ...... private static void checkReturnValue(boolean rv, File p, FsPermission permission ) throws IOException { /** if (!rv) { throw new IOException("Failed to set permissions of path: " + p + " to " + String.format("%04o", permission.toShort())); } **/ } ......
该解决方法不尽美,通过跟踪Hadoop提交作业的代码可发现导致问题的原因,下面代码为在main方法中提交作业到hadoop中处理:
public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(conf, "my word count"); job.setJarByClass(WordCount.class); job.setMapperClass(MapClass.class); // job.setCombinerClass(ReduceClass.class); job.setReducerClass(ReduceClass.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }
提交作业的代码为job.waitForCompletion(true),跟踪进去代码:
public boolean waitForCompletion(boolean verbose) throws IOException, InterruptedException, ClassNotFoundException { if(state == JobState.DEFINE) submit(); if(verbose) jobClient.monitorAndPrintJob(conf, info); else info.waitForCompletion(); return isSuccessful(); }
submit()提交方法代码为:
public void submit() throws IOException, InterruptedException, ClassNotFoundException { ensureState(JobState.DEFINE); setUseNewAPI(); connect(); info = jobClient.submitJobInternal(conf); super.setJobID(info.getID()); state = JobState.RUNNING; }
里面还是调用了jobClient的方法jobClient.submitJobInternal(conf),在submitJobInternal()方法中使用status = jobSubmitClient.submitJob(jobId, submitJobDir.toString(), jobCopy.getCredentials())方法来提交job,jobSubmitClient有两个实现如下:
通过看JobClient中的init方法发现默认实例化的是LocalJobRunner对象:
public void init(JobConf conf) throws IOException { String tracker = conf.get("mapred.job.tracker", "local"); tasklogtimeout = conf.getInt("mapreduce.client.tasklog.timeout", 60000); ugi = UserGroupInformation.getCurrentUser(); if("local".equals(tracker)) { conf.setNumMapTasks(1); jobSubmitClient = new LocalJobRunner(conf); } else { rpcJobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf); jobSubmitClient = createProxy(rpcJobSubmitClient, conf); } }
所以job默认是提交到本地的job tracker,所以运行失败,可以在提交job时设置下conf的mapred.job.tracker属性为集群,如下:
public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set("mapred.job.tracker", "master-2:49001"); ...... System.exit(job.waitForCompletion(true) ? 0 : 1); }
相关推荐
3. **作业提交**:开发者可以直接在Eclipse中编译、打包和提交MapReduce作业到Hadoop集群,无需手动执行命令行操作,极大地简化了开发流程。 4. **调试支持**:插件提供了强大的调试功能,可以在本地模拟运行...
《Hadoop Eclipse Plugin:开发利器的进化》 在大数据领域,Hadoop作为开源分布式计算框架,扮演着核心角色。为了方便开发者在Eclipse或MyEclipse这样的集成开发环境中高效地进行Hadoop应用开发,Hadoop-Eclipse-...
4. **提交任务**:直接在Eclipse中将MapReduce作业提交到Hadoop集群,无需离开IDE。 5. **资源管理**:插件支持资源管理器视图,便于查看和管理HDFS上的文件和目录。 6. **版本兼容性**:针对Hadoop 2.7.4的优化,...
hadoop eclipse plugin for version 1.0.1
5. **提交和监控作业**:在Eclipse中直接提交MapReduce作业到Hadoop集群,并可以在集群的Web UI中监控作业状态,查看日志信息。 6. **调试作业**:利用Eclipse的强大调试功能,可以在本地进行MapReduce作业的单步...
【Hadoop Eclipse Plugin 1.1.2:开启Hadoop在Eclipse中的开发之旅】 Hadoop Eclipse Plugin 1.1.2 是一个专门为Eclipse IDE设计的插件,旨在简化Hadoop应用程序的开发过程。这个插件使得Java开发者能够在熟悉的...
Hadoop Eclipse Plugin的引入,使得开发者可以直接在Eclipse中创建、编辑、运行和调试Hadoop作业,无需离开熟悉的IDE环境。它支持HDFS的文件操作,如查看、上传和下载文件,以及对MapReduce作业的生命周期管理,包括...
《Hadoop Eclipse Plugin 2.7.2:高效开发与远程调试工具》 在大数据处理领域,Apache Hadoop 是一个不可或缺的开源框架,它为分布式存储和计算提供了强大的支持。而为了方便Java开发者在Eclipse集成开发环境中进行...
《Hadoop Eclipse Plugin 2.6.0:整合Eclipse开发环境的利器》 Hadoop Eclipse Plugin 2.6.0是一款专为Eclipse集成开发环境设计的插件,它使得开发者能够在熟悉的Eclipse环境中直接操作和管理Hadoop集群,极大地...
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
3. **作业提交**:开发者可以直接在Eclipse中提交MapReduce作业到Hadoop集群,减少了在命令行之间切换的繁琐步骤。 4. **日志查看**:插件集成了Hadoop作业的日志查看功能,开发者可以实时监控作业执行情况,定位并...
hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1
3. **任务提交**:通过插件,开发者可以在Eclipse内直接提交MapReduce作业到Hadoop集群,减少了开发过程中的繁琐步骤。 4. **调试支持**:提供断点调试功能,可以逐行跟踪MapReduce任务的执行,便于定位和解决问题...
最后,可以在本地或远程Hadoop集群上提交并运行作业,观察和调试运行日志。 总之,Hadoop Eclipse Plugin 2.7.2是Hadoop开发者的重要工具,它使得Hadoop开发更加便捷高效。如果你是Hadoop初学者或者希望提升开发...
Hadoop Eclipse Plugin允许开发者在Eclipse IDE中直接操作Hadoop集群,如创建Hadoop项目、部署MapReduce作业、查看作业执行状态等。这极大地简化了Hadoop应用的开发流程,提高了开发效率。 3. **不同版本的区别** ...
Hadoop Eclipse是Hadoop开发环境的插件,用户在创建Hadoop程序时,Eclipse插件会自动导入Hadoop编程接口的jar文件,这样用户就可以在Eclipse插件的图形界面中进行编码、调试和运行Hadop程序,也能通过Eclipse插件...
《Hadoop Eclipse Plugin 2.7.4:整合开发环境的利器》 在大数据处理领域,Hadoop无疑是一个核心组件,而Eclipse作为Java开发的主流IDE,为开发者提供了强大的工具支持。当这两个世界相遇,便诞生了Hadoop Eclipse ...
hadoop eclipse plugin,可以集成Eclipse进行开发。
《Hadoop Eclipse Plugin 2.7.1:集成开发环境的利器》 Hadoop Eclipse Plugin 2.7.1是一款专为Java开发人员设计的工具,它允许开发者在流行的集成开发环境Eclipse中直接对Hadoop项目进行操作。这个插件极大地简化...
4. **运行和调试作业**:直接在Eclipse中提交作业到Hadoop集群,查看运行日志,进行单步调试。 5. **资源管理**:可视化查看Hadoop集群资源,监控作业执行状态。 在实际使用中,`hadoop-eclipse-plugin-2.7.1.jar` ...