HDFS API : rename重命名hdfs文件失败原因

3 篇文章 0 订阅

一、问题描述


通过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

四、参考

1.HDFS——数据移动API Rename说明

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFS (Hadoop Distributed File System) 是 Apache Hadoop 的分布式文件系统,用于存储和处理大量数据。在 HDFS 中,文件和目录是不可变的,一旦创建就无法直接修改其名称。然而,你可以通过一些机制来进行文件重命名,即使不能直接修改文件名,也可以间接实现类似的效果。 自定义改名通常涉及以下几个步骤: 1. 删除旧文件:首先,你需要将旧文件删除。在 HDFS 中,这可以通过 `hdfs dfs -rm` 命令完成。注意,由于 HDFS 的设计,删除操作实际上会创建一个新的、空的文件,然后将旧文件的数据移动到新的位置。 2. 创建新文件:使用相同的 `hdfs dfs -put` 或者 `hdfs dfs -copyFromLocal` 命令,将数据复制到新的文件路径,这样就创建了一个新的文件。 3. 删除旧引用:删除操作并不会自动清除旧文件名的元数据,为了确保旧名字不再被其他进程访问,你需要调用 `hdfs dfs -rename` 或者 `hdfs dfs -moveFromLocal` 来删除旧的元数据,但这实际上是不可见的,因为HDFS不支持直接的重命名。 4. 验证更改:最后,确认新文件已经正确创建并且旧文件名不再可用,可以通过 `hdfs dfs -ls` 查看文件列表来验证。 重要的是,由于 HDFS 的设计,这种操作可能会导致一些短暂的文件状态不一致,尤其是在大规模集群中。因此,如果可能的话,最好在低流量或批量任务期间进行这类更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值