查看 hdfs 相对路径
查看文件的命令为:
1
hadoop fs -ls
可以用 Hadoop 的
fs命令操作 HDFS(分布式文件系统),每个用户有一个默认的工作目录,通常为/user/<用户名>- 特别说明:Hadoop 并不像 Linux Shell 那样有
pwd命令直接显示当前工作目录(hadoop fs -pwd)是会报错的
- 特别说明:Hadoop 并不像 Linux Shell 那样有
查看当前用户的默认工作目录的方式
第一步:查看当前用户名
1
2
3whoami
# 或(部分 Hadoop 版本支持)
hadoop fs -whoami第二步:推断当前工作目录
- 默认情况下,工作目录为
/user/<用户名> - 例如,如果用户名是
hadoop-aipnlp,默认工作目录就是/user/hadoop-aipnlp
- 默认情况下,工作目录为
注:推荐始终使用绝对路径,避免因工作目录变化导致混淆
示例:
1
2hadoop fs -ls /user/hadoop-xxx/xxx
hadoop fs -ls user/hadoop-xxx/xxx # 相对路径,绝对路径是 /user/<用户名>/user/hadoop-xxx/xxx- 以上两行命令访问的不是同一个路径
HDFS 副本维护
- 在 HDFS 或类似分布式文件系统中,一般来说,副本是正常同步的
- 当通过 HDFS API(如
hdfs dfs -put、hdfs dfs -appendToFile)修改文件内容时,NameNode 会协调 DataNode 同步更新所有副本 - HDFS 文件是不可变的(append-only),不能像本地文件一样随机修改已经存在的内容
- 如果在文件夹下直接修改某个副本所在的节点上的物理文件(绕过 HDFS),这些更改不会自动同步到其他副本,而且会破坏数据一致性
- 正确的修改方式 :如果需要更新内容,必须通过 HDFS 提供的写入接口重新上传或追加文件,这样系统会自动更新所有副本
特殊的管理方式
- 如果将 HDFS 文件夹挂载到 Docker,可通过指定在 Docker 内所有的操作都为 HDFS 接口的操作来实现副本维护(但仅限于单集群,其他集群的做不到同步)
- 此时,在 Docker 内部,对 HDFS 文件夹的访问就像普通访问一样简单
- 例如
cp, mkdir, rm等命令都可以正常使用,且保证多个副本之间的一致性
- 例如
比较三种命令的区别
- 在管理 HDFS 文件时,我们常用的命令有三个
hadoop fs,hadoop dfs和hdfs dfs【注意没有hdfs fs】* - 在 Hadoop 生态中,
hadoop fs、hadoop dfs和hdfs dfs都是用于操作文件系统的命令,但它们的适用范围和历史背景有所不同 hadoop fs- 通用的文件系统操作命令,不仅可以操作 HDFS,还可以操作 Hadoop 支持的其他文件系统(如本地文件系统
file:///、分布式文件系统如 S3 等) - 通过指定不同的文件系统前缀(如
hdfs://、file:///),可以对对应的文件系统执行创建目录、上传文件、查看文件等操作 - 由于其通用性,
hadoop fs是官方更推荐的命令,适用于需要跨不同文件系统操作的场景
- 通用的文件系统操作命令,不仅可以操作 HDFS,还可以操作 Hadoop 支持的其他文件系统(如本地文件系统
hadoop dfs- 早期 Hadoop 版本中用于操作 HDFS 的命令,仅支持 HDFS 文件系统
- 在 Hadoop 2.x 及之后的版本中,
hadoop dfs逐渐被hdfs dfs取代,成为一个“历史遗留”的命令(实际执行时会映射到hdfs dfs) - 不推荐在新版本中使用,可能会在未来版本中移除
hdfs dfs- 专门用于操作 HDFS(Hadoop 分布式文件系统)的命令,功能与
hadoop dfs完全一致,但更明确地指向 HDFS - Hadoop 2.x 引入
hdfs命令组(如hdfs dfs、hdfs namenode等),将 HDFS 相关操作与其他 Hadoop 功能(如 MapReduce)分离,使命令结构更清晰 - 如果明确需要操作 HDFS,
hdfs dfs是更规范的选择
- 专门用于操作 HDFS(Hadoop 分布式文件系统)的命令,功能与
- 总结
- 通用场景:优先使用
hadoop fs,可操作多种文件系统 - 仅操作 HDFS:推荐使用
hdfs dfs,功能明确且符合新版本规范 - 避免使用:
hadoop dfs已过时,不建议在新环境中使用 - 三者在操作 HDFS 时的核心功能(如
put、get、ls等)完全一致,区别主要在于适用范围和版本兼容性
- 通用场景:优先使用