hdfs文件系统FileSystem.rename异常

原创 2013年12月04日 17:30:51
org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.ClassCastException: org.apache.hadoop.hdfs.server.namenode.INodeFileUnderConstruction cannot be cast to org.apache.hadoop.hdfs.server.namenode.INodeDirectory
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChild(FSDirectory.java:1132)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addChildNoQuotaCheck(FSDirectory.java:1152)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedRenameTo(FSDirectory.java:457)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.renameTo(FSDirectory.java:375)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.renameToInternal(FSNamesystem.java:1999)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.renameTo(FSNamesystem.java:1969)
at org.apache.hadoop.hdfs.server.namenode.NameNode.rename(NameNode.java:847)
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1439)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1435)
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:1278)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1433)

今天运行 一个FileSystem.rename的时候报错了。后来发现应该是文件的父目录不存在,创建好就ok了。具体原理还有待查看源码

关键代码

/**
	 * 删除目录或者文件到指定文件
	 * @param filePath
	 * @return
	 * @throws IOException
	 */
	public static boolean deleteFileToTrash(FileSystem fs,String filePath) throws IOException{
		
		if(!checkedUserAuthority(filePath)){
			//操作其他的用户下的文件属于非法操作
			return false;
		}
		Path dstPath=getDstPath(filePath);
		Path parentPath=dstPath.getParent();
		String fileName=dstPath.getName();
		//处理逻辑 如果不存在就创建,如果存在并且是非目录
		if (!fs.exists(parentPath)) {
			fs.mkdirs(parentPath);
		}else if (!fs.getFileStatus(parentPath).isDir()) {
			parentPath=handlerRepeatFileDirSameName(0, fs, parentPath);
			fs.mkdirs(parentPath);
		}
		dstPath=new Path(parentPath,fileName);
		if (fs.exists(dstPath)) {
			dstPath=handlerRepeatFile(0,fs,dstPath);
		}
		return fs.rename(new Path(filePath),dstPath);
	}


相关文章推荐

hadoop,hive中的mv(rename)操作

系统环境:hadoop2.7.2+hive1.2.1        大约一年多之前,将hive版本从0.14升级到了1.2.1。之后发现新版本在最后一步写入数据的时候,会比以前慢很多。最后发现是由于...

HDFS文件常用操作

弄了段时间hadoop的HDFS,用了些常用的HDFS文件操作,记录如下,以作Memo:       /** * @Title: uploadLocalFileToHDFS * @Descrip...
  • vtopqx
  • vtopqx
  • 2013年02月25日 12:06
  • 3917

【Hadoop基础】hadoop fs 命令

1,hadoop fs –fs [local | ]:声明hadoop使用的文件系统,如果不声明的话,使用当前配置文件配置的,按如下顺序查找:hadoop jar里的hadoop-default.xm...

[Hadoop]HDFS文件的相关操作(上传、新建、删除和重命名)

package com.hadooplearn.test; import java.io.FileOutputStream; import java.io.IOException; import o...

Hadoop——重命名文件

import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.f...

JAVA API操作HDFS文件系统

一个通过JAVA API操作HDFS文件系统的例子,本例子使用的是hadoop0.20的版本,在windows的eclipse下运行的时候,需要将core-site.xml和hdfs-site.xml...
  • kkdelta
  • kkdelta
  • 2014年02月25日 13:55
  • 11256

回顾亚马逊推荐系统20年发展

回顾亚马逊推荐系统20年发展 推荐系统 亚马逊 阅读2164  近期,IEEE Internet Computing上发表了一篇名为《亚马逊推...

flume + Kafka采集数据 超简单

说到标题,这只是实时架构中的一小部分内容。 下载最新版本flume:apache-flume-1.6.0-bin.tar.gz  解压缩,修改conf/flume-conf.properties ...

Hadoop HDFS文件系统通过java FileSystem 实现上传下载等

java 通过 hadoop api , FileSystem ,实现对文件的创建,删除,下载,上传。或者获取文件流等。...
  • linlinv3
  • linlinv3
  • 2015年01月14日 17:40
  • 10919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdfs文件系统FileSystem.rename异常
举报原因:
原因补充:

(最多只允许输入30个字)