当前位置: 首页 > news >正文

HDFS客户端操作

一、命令行工具操作

HDFS 命令行工具基于 hdfs dfs 命令,语法类似 Linux 文件操作。

1. 文件操作

bash

# 创建目录
hdfs dfs -mkdir /test# 递归创建多级目录
hdfs dfs -mkdir -p /test/data/logs# 上传本地文件到 HDFS
hdfs dfs -put local_file.txt /test/# 从 HDFS 下载文件
hdfs dfs -get /test/local_file.txt ./downloaded.txt# 查看文件内容
hdfs dfs -cat /test/local_file.txt# 追加内容到文件
echo "new line" | hdfs dfs -appendToFile - /test/local_file.txt
2. 目录操作

bash

# 查看目录内容
hdfs dfs -ls /test# 递归查看目录
hdfs dfs -ls -R /test# 删除文件/目录
hdfs dfs -rm /test/file.txt         # 删除文件
hdfs dfs -rm -r /test/data          # 递归删除目录# 移动/重命名
hdfs dfs -mv /test/file.txt /test/new_file.txt  # 重命名
hdfs dfs -mv /test/data /new_location/          # 移动目录
3. 文件状态与权限

bash

# 查看文件状态
hdfs dfs -stat /test/file.txt# 查看文件块信息
hdfs fsck /test/file.txt -files -blocks# 修改权限
hdfs dfs -chmod 755 /test/dir# 修改所有者
hdfs dfs -chown hadoop:hadoop /test/file.txt
4. 数据均衡

bash

# 启动集群数据均衡(按磁盘使用率)
start-balancer.sh -threshold 10  # 阈值10%

二、Java API 操作

通过 HDFS 的 Java API 可以在代码中操作文件系统。

1. 添加依赖(Maven)

xml

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.6</version>
</dependency>
2. Java 代码示例

java

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;public class HdfsExample {public static void main(String[] args) throws Exception {// 配置 HDFSConfiguration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://master:9000");FileSystem fs = FileSystem.get(conf);// 创建目录Path dirPath = new Path("/java_api_test");if (!fs.exists(dirPath)) {fs.mkdirs(dirPath);System.out.println("目录创建成功");}// 上传文件Path localPath = new Path("/path/to/local/file.txt");Path hdfsPath = new Path("/java_api_test/file.txt");fs.copyFromLocalFile(localPath, hdfsPath);System.out.println("文件上传成功");// 查看目录内容FileStatus[] statuses = fs.listStatus(dirPath);for (FileStatus status : statuses) {System.out.println(status.getPath());}// 读取文件内容FSDataInputStream in = fs.open(hdfsPath);BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}reader.close();// 删除文件fs.delete(hdfsPath, false);System.out.println("文件已删除");// 关闭连接fs.close();}
}

三、WebHDFS REST API

通过 HTTP 请求操作 HDFS(需启用 dfs.webhdfs.enabled)。

1. 创建目录

bash

curl -i -X PUT "http://master:9870/webhdfs/v1/test_dir?op=MKDIRS"
2. 上传文件

bash

curl -i -L -X PUT "http://master:9870/webhdfs/v1/test_dir/file.txt?op=CREATE&overwrite=true" \-T /path/to/local/file.txt
3. 查看文件

bash

curl -i "http://master:9870/webhdfs/v1/test_dir/file.txt?op=OPEN"
4. 删除文件

bash

curl -i -X DELETE "http://master:9870/webhdfs/v1/test_dir/file.txt?op=DELETE"

四、常见操作场景

1. 查看文件块位置

bash

hdfs fsck /path/to/file -files -blocks -locations
2. 更改文件副本数

bash

hdfs dfs -setrep 5 /path/to/file  # 设置为5个副本
3. 统计目录大小

bash

hdfs dfs -du -h /path/to/dir  # 以人类可读格式显示
4. 检查集群健康状态

bash

hdfs dfsadmin -report

五、注意事项

  1. 权限问题

    • HDFS 遵循 Unix 风格的权限模型(用户、组、其他)。
    • 操作时需确保用户有足够权限。
  2. 路径规范

    • 绝对路径以 / 开头,相对路径相对于用户的 HDFS 主目录(/user/<username>)。
  3. 性能建议

    • 避免频繁创建小文件(会消耗 NameNode 内存)。
    • 大规模数据传输建议使用 distcp 命令。
  4. 安全模式

    • 当集群处于安全模式时,只能读取不能写入。可通过 hdfs dfsadmin -safemode leave 退出。

相关文章:

  • 排查服务器内存空间预警思路
  • AI日报 - 2024年05月13日
  • 航电系统之电传飞行控制系统篇
  • Excel VBA 与 AcroForm 文档级脚本对比
  • MCU开启浮点计算FPU
  • [springboot]SSM日期数据转换易见问题
  • Linux电源管理(五),发热管理(thermal),温度控制
  • C 语 言 - - - 简 易 通 讯 录
  • Python 字符串
  • 【Linux 系统调试】syslog:Linux 系统日志工具详解
  • c++STL-vector的模拟实现
  • 开关电源滤波器讲解
  • 鲁滨逊归结原理详解:期末考点+解题指南
  • c++刷题便捷函数(类似于stoi的小函数)
  • 解锁性能密码:Linux 环境下 Oracle 大页配置全攻略​
  • 基于大模型的甲状腺结节诊疗全流程预测与方案研究报告
  • 基于STM32、HAL库的RN7302电能计量芯片驱动程序设计
  • Docke容器下JAVA系统时间与Linux服务器时间不一致问题解决办法
  • latex控制表格宽度,不要超出页面
  • java 中 pojo 的详细讲解
  • 浙江省机电集团党委书记、董事长廉俊接受审查调查
  • 75万采购防火墙实为299元路由器?重庆三峡学院发布终止公告:出现违法违规行为
  • 2025年4月份CPI环比由降转涨,核心CPI涨幅稳定
  • 游客称在网红雪山勒多曼因峰需救援被开价2.8万,康定文旅:封闭整改
  • 虚假认定实质性重组、高估不良债权价值,原中国华融资产重庆分公司被罚180万元
  • 欧洲承诺投资6亿欧元吸引外国科学家