`
chenzehe
  • 浏览: 538217 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hadoop Eclipse plugin 提交作业异常探究

 
阅读更多

在配置好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);
	}

 

 

 

 

分享到:
评论

相关推荐

    hadoop-eclipse-plugin-2.6.0.jar.zip_2.6.0_hadoop_hadoop plugin

    3. **作业提交**:开发者可以直接在Eclipse中编译、打包和提交MapReduce作业到Hadoop集群,无需手动执行命令行操作,极大地简化了开发流程。 4. **调试支持**:插件提供了强大的调试功能,可以在本地模拟运行...

    hadoop-eclipse-plugin1.2.1 and hadoop-eclipse-plugin2.8.0

    《Hadoop Eclipse Plugin:开发利器的进化》 在大数据领域,Hadoop作为开源分布式计算框架,扮演着核心角色。为了方便开发者在Eclipse或MyEclipse这样的集成开发环境中高效地进行Hadoop应用开发,Hadoop-Eclipse-...

    hadoop-eclipse-plugin-2.7.4

    4. **提交任务**:直接在Eclipse中将MapReduce作业提交到Hadoop集群,无需离开IDE。 5. **资源管理**:插件支持资源管理器视图,便于查看和管理HDFS上的文件和目录。 6. **版本兼容性**:针对Hadoop 2.7.4的优化,...

    hadoop eclipse plugin 1.0.1

    hadoop eclipse plugin for version 1.0.1

    hadoop-eclipse-plugin-2.6.5.jar插件下载

    5. **提交和监控作业**:在Eclipse中直接提交MapReduce作业到Hadoop集群,并可以在集群的Web UI中监控作业状态,查看日志信息。 6. **调试作业**:利用Eclipse的强大调试功能,可以在本地进行MapReduce作业的单步...

    hadoop-eclipse-plugin-1.1.2

    【Hadoop Eclipse Plugin 1.1.2:开启Hadoop在Eclipse中的开发之旅】 Hadoop Eclipse Plugin 1.1.2 是一个专门为Eclipse IDE设计的插件,旨在简化Hadoop应用程序的开发过程。这个插件使得Java开发者能够在熟悉的...

    hadoop-eclipse-plugin.rar

    Hadoop Eclipse Plugin的引入,使得开发者可以直接在Eclipse中创建、编辑、运行和调试Hadoop作业,无需离开熟悉的IDE环境。它支持HDFS的文件操作,如查看、上传和下载文件,以及对MapReduce作业的生命周期管理,包括...

    hadoop-eclipse-plugin2.7.2-2.7.3-2.5.1.zip

    《Hadoop Eclipse Plugin 2.7.2:高效开发与远程调试工具》 在大数据处理领域,Apache Hadoop 是一个不可或缺的开源框架,它为分布式存储和计算提供了强大的支持。而为了方便Java开发者在Eclipse集成开发环境中进行...

    hadoop-eclipse-plugin-2.6.0.jar

    《Hadoop Eclipse Plugin 2.6.0:整合Eclipse开发环境的利器》 Hadoop Eclipse Plugin 2.6.0是一款专为Eclipse集成开发环境设计的插件,它使得开发者能够在熟悉的Eclipse环境中直接操作和管理Hadoop集群,极大地...

    hadoop-eclipse-plugin-3.1.1.tar.gz

    Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...

    hadoop-eclipse-plugin-2.7.0.jar

    3. **作业提交**:开发者可以直接在Eclipse中提交MapReduce作业到Hadoop集群,减少了在命令行之间切换的繁琐步骤。 4. **日志查看**:插件集成了Hadoop作业的日志查看功能,开发者可以实时监控作业执行情况,定位并...

    好用hadoop-eclipse-plugin-1.2.1

    hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1hadoop-eclipse-plugin-1.2.1

    hadoop-eclipse-plugin-2.7.7.jar.rar

    3. **任务提交**:通过插件,开发者可以在Eclipse内直接提交MapReduce作业到Hadoop集群,减少了开发过程中的繁琐步骤。 4. **调试支持**:提供断点调试功能,可以逐行跟踪MapReduce任务的执行,便于定位和解决问题...

    hadoop-eclipse-plugin-2.7.2.rar

    最后,可以在本地或远程Hadoop集群上提交并运行作业,观察和调试运行日志。 总之,Hadoop Eclipse Plugin 2.7.2是Hadoop开发者的重要工具,它使得Hadoop开发更加便捷高效。如果你是Hadoop初学者或者希望提升开发...

    hadoop-eclipse-plugin

    Hadoop Eclipse Plugin允许开发者在Eclipse IDE中直接操作Hadoop集群,如创建Hadoop项目、部署MapReduce作业、查看作业执行状态等。这极大地简化了Hadoop应用的开发流程,提高了开发效率。 3. **不同版本的区别** ...

    Hadoop开发环境的插件hadoop-eclipse-plugin-2.10.1

    Hadoop Eclipse是Hadoop开发环境的插件,用户在创建Hadoop程序时,Eclipse插件会自动导入Hadoop编程接口的jar文件,这样用户就可以在Eclipse插件的图形界面中进行编码、调试和运行Hadop程序,也能通过Eclipse插件...

    hadoop-eclipse-plugin-2.7.4.jar

    《Hadoop Eclipse Plugin 2.7.4:整合开发环境的利器》 在大数据处理领域,Hadoop无疑是一个核心组件,而Eclipse作为Java开发的主流IDE,为开发者提供了强大的工具支持。当这两个世界相遇,便诞生了Hadoop Eclipse ...

    hadoop eclipse plugin

    hadoop eclipse plugin,可以集成Eclipse进行开发。

    hadoop-eclipse-plugin-2.7.1

    《Hadoop Eclipse Plugin 2.7.1:集成开发环境的利器》 Hadoop Eclipse Plugin 2.7.1是一款专为Java开发人员设计的工具,它允许开发者在流行的集成开发环境Eclipse中直接对Hadoop项目进行操作。这个插件极大地简化...

    hadoop-eclipse-plugin-2.7.1.jar

    4. **运行和调试作业**:直接在Eclipse中提交作业到Hadoop集群,查看运行日志,进行单步调试。 5. **资源管理**:可视化查看Hadoop集群资源,监控作业执行状态。 在实际使用中,`hadoop-eclipse-plugin-2.7.1.jar` ...

Global site tag (gtag.js) - Google Analytics