HDFS 命令

本文介绍了HDFS的常用操作命令,包括查看目录信息、创建目录、文件的移动与复制、查看文件内容、修改副本数量等。同时提到了在安全模式下进行操作的注意事项以及如何合并下载多个文件。

显示目录信息
hadoop fs -ls /
创建目录
hadoop fs -mkdir -p /pys/mkdirtest
剪切文件 本地目录 HDFS目录
hadoop fs -moveFromLocal ./test.txt /pys/
拷贝文件 本地目录 HDFS目录
hadoop fs -copyFromLocal ./test.txt /pys/
hadoop fs -put ./test.txt /pys/
拷贝文件到本地 HDFS目录 本地目录
hadoop fs -copyToLocal /pys/test.txt ./
hadoop fs -get /pys/test.txt ./
追加文件到已存在的文件末尾 当前文件 目标文件
不支持修改文件
hadoop fs -appendToFile ./test01.txt /pys/test.txt
查看HDFS文件内容
hadoop fs -cat /pys/test.txt

无法使用appenToFile

hadoop fs -appendToFile 3 /2

20/07/15 09:29:18 INFO hdfs.DFSClient: Exception in createBlockOutputStream
java.io.IOException: Got error, status message , ack with firstBadLink as 172.21.0.7:50010
	at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:140)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1363)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1188)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:455)
20/07/15 09:29:18 WARN hdfs.DFSClient: Error Recovery for block BP-31621113-127.0.0.1-1594741021462:blk_1073741841_1021 in pipeline DatanodeInfoWithStorage[106.55.63.155:50010,DS-37f9b2de-2d14-4193-9767-e247b6058ae9,DISK], DatanodeInfoWithStorage[120.53.240.85:50010,DS-53d8f2de-e259-4361-b878-1a1a96225ef7,DISK], DatanodeInfoWithStorage[172.21.0.7:50010,DS-4f026c85-cdc7-446e-9664-478aac9a5d0f,DISK]: bad datanode DatanodeInfoWithStorage[172.21.0.7:50010,DS-4f026c85-cdc7-446e-9664-478aac9a5d0f,DISK]
20/07/15 09:29:19 WARN hdfs.DFSClient: DataStreamer Exception
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[106.55.63.155:50010,DS-37f9b2de-2d14-4193-9767-e247b6058ae9,DISK], DatanodeInfoWithStorage[120.53.240.85:50010,DS-53d8f2de-e259-4361-b878-1a1a96225ef7,DISK]], original=[DatanodeInfoWithStorage[106.55.63.155:50010,DS-37f9b2de-2d14-4193-9767-e247b6058ae9,DISK], DatanodeInfoWithStorage[120.53.240.85:50010,DS-53d8f2de-e259-4361-b878-1a1a96225ef7,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:918)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:992)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1160)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:455)
20/07/15 09:29:19 ERROR hdfs.DFSClient: Failed to close inode 16424
java.io.IOException: Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try. (Nodes: current=[DatanodeInfoWithStorage[106.55.63.155:50010,DS-37f9b2de-2d14-4193-9767-e247b6058ae9,DISK], DatanodeInfoWithStorage[120.53.240.85:50010,DS-53d8f2de-e259-4361-b878-1a1a96225ef7,DISK]], original=[DatanodeInfoWithStorage[106.55.63.155:50010,DS-37f9b2de-2d14-4193-9767-e247b6058ae9,DISK], DatanodeInfoWithStorage[120.53.240.85:50010,DS-53d8f2de-e259-4361-b878-1a1a96225ef7,DISK]]). The current failed datanode replacement policy is DEFAULT, and a client may configure this via 'dfs.client.block.write.replace-datanode-on-failure.policy' in its configuration.
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:918)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:992)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1160)
	at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:455)

修改hdfs-site.xml文件,添加或者修改如下两项:

<!-- appendToFile追加 -->
<property>
       <name>dfs.support.append</name>
       <value>true</value>
</property>

<property>
       <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
       <value>NEVER</value>
</property>

<property>
       <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
       <value>true</value>
</property>

xsync 分开一下修改hdfs 文件
然后重启集群
Cannot append to file/pys/test.txt. Name node is in safe mode.
hadoop dfsadmin -safemode leave命令离开安全模式

从HDFS一个路径拷贝到HDFS另一个路径
hadoop fs -cp /pys/test.txt /pys/mkdirtest/
从HDFS一个路径移动到HDFS另一个路径
hadoop fs -mv /pys/test.txt /pys/mkdirtest/
从HDFS上合并下载多个文件
hadoop fs -getmerge /pys/* ./hebing.txt
删除HDFS上的文件或者文件夹
hadoop fs -rm /pys/test.txt 删除文件
hadoop fs -rm -r /pys/mkdirtest/ 删除文件夹
删除HDFS上的空目录
hadoop fs -rmdir /test
统计文件夹大小
hadoop fs -du /pys
设置HDFS文件的副本数量
hadoop fs -setrep 5 /pys/test.txt

在 Apache Flink 中,如果你使用 `FsStateBackend` 并配置了 HDFS 路径(例如 `hdfs://namenode:9000/flink/checkpoints`),Flink 会通过 Hadoop 的 Java API 与 HDFS 交互,进行 Checkpoint 和 Savepoint 的写入和读取操作。 --- ## ✅ 答案: ### ✅ Flink 本身**不直接调用 HDFS 命令行(如 `hdfs dfs -put`)**,而是使用 Hadoop 的 Java API 来操作 HDFS 上的 Checkpoint 数据。 --- ## ✅ Flink 是如何与 HDFS 交互的? Flink 使用 `org.apache.hadoop.fs.FileSystem` 类(Hadoop API)来操作 HDFS 文件系统。这些操作包括: - 创建目录 - 写入 Checkpoint 文件 - 读取 Savepoint 文件 - 删除过期的 Checkpoint 这些操作是通过 Hadoop 客户端完成的,不需要调用命令行 `hdfs`。 --- ## ✅ 示例:Flink 使用 HDFS 作为 Checkpoint 存储路径 ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 设置 FsStateBackend,使用 HDFS 作为 Checkpoint 存储路径 env.setStateBackend(new FsStateBackend("hdfs://namenode:9000/flink/checkpoints")); // 启用 Checkpoint env.enableCheckpointing(5000); // 每 5 秒做一次 Checkpoint env.addSource(new FlinkKafkaConsumer<>("input-topic", new SimpleStringSchema(), props)) .keyBy(keySelector) .process(new MyKeyedProcessFunction()) .addSink(new MySink()); env.execute("Job with HDFS Checkpoint"); ``` --- ## ✅ Flink 如何配置 Hadoop 环境? 为了使 Flink 能访问 HDFS,你需要: ### 1. 配置 `HADOOP_CLASSPATH`(可选) 确保 Flink 能找到 Hadoop 的类路径: ```bash export HADOOP_CLASSPATH=`hadoop classpath` ``` ### 2. 将 Hadoop 配置文件放到 Flink `conf` 目录下: - `core-site.xml` - `hdfs-site.xml` Flink 会自动加载这些配置文件来连接 HDFS。 ### 3. 使用 Hadoop 配置对象(可选) 你也可以在代码中手动设置 Hadoop 配置: ```java Configuration config = new Configuration(); config.set("fs.defaultFS", "hdfs://namenode:9000"); config.set("hadoop.job.ugi", "hadoop,password"); UserGroupInformation.setConfiguration(config); ``` --- ## ✅ Flink Checkpoint 在 HDFS 中的目录结构 Flink 的 Checkpoint 数据会以如下方式存储在 HDFS 中: ``` hdfs://namenode:9000/flink/checkpoints/ └── <job-id>/ ├── chk-123/ │ ├── a1-0 │ ├── a2-0 │ └── metadata └── latest ``` - `chk-123`:Checkpoint ID,123 表示第 123 次 Checkpoint - `metadata`:元数据文件,记录 Checkpoint 的元信息 - `latest`:符号链接,指向最新的 Checkpoint 目录 --- ## ✅ 你可以手动使用 HDFS 命令查看这些文件 虽然 Flink 不使用命令行操作 HDFS,但你可以使用 `hdfs dfs` 命令查看和管理这些文件: ```bash # 查看 Checkpoint 文件 hdfs dfs -ls /flink/checkpoints/<job-id>/chk-123 # 查看元数据文件内容 hdfs dfs -cat /flink/checkpoints/<job-id>/chk-123/metadata # 删除过期 Checkpoint hdfs dfs -rm -r /flink/checkpoints/<job-id>/chk-100 ``` --- ## ✅ 总结 | 操作 | 是否使用命令行 | |------|----------------| | Flink 写入 Checkpoint 到 HDFS | ❌ 不使用 `hdfs dfs` 命令行,使用 Hadoop Java API | | 查看或管理 Checkpoint 文件 | ✅ 可以使用 `hdfs dfs` 命令行 | | 配置 Flink 与 HDFS 的连接 | ✅ 通过 `flink-conf.yaml` 或 `core-site.xml` 配置 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值