一、问题描述
通过spark-shell启动,使用hdfs的重命名api:rename修改文件名称,时而报错。
scala> import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.conf.Configuration
scala> import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.fs.{FileSystem, Path}
scala> val hdfs: FileSystem = FileSystem.get(new Configuration)
hdfs: org.apache.hadoop.fs.FileSystem = DFS[DFSClient[clientName=DFSClient_NONMAPREDUCE_-812716979_1, ugi=mip (auth:SIMPLE)]]
scala> hdfs.rename(new Path("/data/test1.txt/part-0000"),new Path("/data/test1.txt"))
res0: Boolean = false
二、问题原因
经过研究以及验证,是因为源是文件,而目的是路径,而且已经存在。
分析其他原因:
(1)源或者目的的目录或文件不存在;
(2)源是文件,目的是目录;或者相反。
(3)没有权限;
三、解决办法
将目的路径改为不存在的路径。
scala> hdfs.rename(new Path("/data/test1.txt/part-0000"),new Path("/data/test2.txt"))
res0: Boolean = true