HDFS编程实践(2026年10月)

💡 原文中文,约14000字,阅读约需34分钟。
📝

内容提要

本指南介绍HDFS文件系统操作实践,涵盖Shell命令交互(创建用户目录、上传下载文件、查看内容)、通过Web界面http://localhost:9870管理HDFS,以及用TRAE编写Java程序,添加Hadoop JAR依赖,实现过滤.abc文件并合并内容到merge.txt,最后导出JAR部署运行。

🔎

延伸解读

Shell命令的三种前缀:hadoop fs、hadoop dfs与hdfs d

文章指出,教材中常用“./bin/hadoop dfs”开头的命令,但实际有三种等价写法:hadoop fs、hadoop dfs和hdfs dfs。其中hadoop fs适用于任何文件系统,而后两者仅适用于HDFS。读者在实验时若发现命令报错,可先检查前缀是否与当前环境匹配,避免因命令格式差异导致操作失败。

Java API开发中的依赖管理:为何要添加四个目录的JAR

使用TRAE开发HDFS Java程序时,需要从Hadoop安装目录的common、common/lib、hdfs和hdfs/lib四个位置添加所有JAR文件。文章特别强调common/lib中的依赖(如woodstox-core、stax2-api)也必须添加,否则程序运行时可能因缺少库而失败。这提醒读者,仅添加主JAR往往不够,需完整引入依赖链。

程序重复运行与输出文件处理

示例代码在合并文件时,会跳过输出文件merge.txt本身,并在每次运行时覆盖生成新的merge.txt。这意味着读者可以反复运行程序而无需手动删除旧结果。同时,代码还跳过了子目录,避免将之前Shell实验创建的input目录内容误合并。这种设计提高了实验的容错性和可重复性。

从IDE运行到JAR部署:导出时的关键选择

文章演示了将TRAE项目导出为JAR的流程。导出时需选择MergeFile作为主类,并仅勾选项目的bin目录,不包含Hadoop依赖,因为运行环境已提供这些库。若导出时全选,可能产生大量duplicate entry警告。导出后通过hadoop jar命令运行,验证与IDE中一致的结果,完成从开发到部署的闭环。

❓

Q&A

HDFS的Shell命令有哪几种方式?它们有什么区别?

有三种方式:hadoop fs、hadoop dfs和hdfs dfs。hadoop fs适用于任何文件系统,如本地文件系统和HDFS;hadoop dfs只能用于HDFS;hdfs dfs与hadoop dfs作用相同,也只能用于HDFS。

第一次使用HDFS时,如何为hadoop用户创建用户目录?

使用命令:cd /usr/local/hadoop,然后执行 ./bin/hdfs dfs -mkdir -p /user/hadoop。其中-p表示创建多级目录,/user/hadoop就是hadoop用户的用户目录。

如何通过Web界面管理HDFS?访问地址是什么?

打开Linux自带的Firefox浏览器,访问http://localhost:9870即可看到HDFS的Web管理界面,通过该界面可以查看和管理HDFS文件系统。

在TRAE中开发HDFS Java程序需要添加哪些JAR包?

需要添加Hadoop安装目录下四个目录中的所有.jar文件:/usr/local/hadoop/share/hadoop/common、/usr/local/hadoop/share/hadoop/common/lib、/usr/local/hadoop/share/hadoop/hdfs、/usr/local/hadoop/share/hadoop/hdfs/lib。在TRAE的Java Projects中,通过Referenced Libraries的“+”按钮分别添加这些目录中的JAR文件。

如何编写Java程序过滤.abc文件并合并其他文件内容到merge.txt?

编写MergeFile类,使用MyPathFilter排除后缀为.abc的文件,通过FileSystem.listStatus获取文件列表,按文件名排序后,用FSDataInputStream读取每个非.abc文件的内容,并用FSDataOutputStream写入merge.txt。代码中需设置fs.defaultFS为hdfs://localhost:9000,并跳过子目录和输出文件本身。

如何将TRAE中的Java项目导出为JAR并部署到Hadoop运行?

在TRAE中按Ctrl+Shift+P,选择“Java: 导出到Jar文件...”,主类选择MergeFile,导出时仅勾选项目的bin目录。生成的JAR位于项目根目录,将其复制到/usr/local/hadoop/myapp/,然后执行./bin/hadoop jar ./myapp/HDFSExample.jar MergeFile即可运行。

🏷️

标签

➡️

继续阅读