HDFS编程实践(Hadoop3.5.0)

💡 原文中文,约13400字,阅读约需32分钟。
📝

内容提要

本指南介绍HDFS编程与使用方法,配套《大数据技术原理与应用(第5版)》第4章。内容包括:使用Shell命令与HDFS交互(创建用户目录、上传下载文件、查看和删除目录);通过Web界面http://localhost:9870管理HDFS;使用Java API操作文件。重点讲解在TRAE中开发HDFS程序,添加Hadoop的JAR依赖,编写MergeFile程序合并HDFS中非.abc后缀文件,并导出JAR部署运行。

🔎

延伸解读

Shell命令操作HDFS的要点

文章详细介绍了使用Shell命令与HDFS交互,包括创建用户目录、上传下载文件、查看和删除目录。需要注意的是,首次使用HDFS时必须为当前用户创建用户目录,如“/user/hadoop”,否则后续操作可能出错。使用相对路径时,默认基于用户目录,而绝对路径则从根目录开始。删除目录时,若目录非空,必须使用“-r”参数。这些细节对于正确操作HDFS至关重要。

Web界面与命令行、Java API的关系

文章提到可以通过Web界面(http://localhost:9870)管理HDFS,查看节点信息、日志和下载文件。但强调Web界面的所有功能都能通过Shell命令或Java API等价实现。这意味着在实际开发中,命令行和编程接口更为灵活和强大,Web界面更适合快速查看和监控。读者应根据场景选择合适的方式。

Java API开发中的依赖管理与环境配置

使用Java API操作HDFS时,需要在项目中添加Hadoop的JAR依赖。文章指导在TRAE中通过“Referenced Libraries”添加四个目录下的所有JAR文件,包括common、common/lib、hdfs和hdfs/lib。特别指出common/lib中的依赖(如woodstox-core)也必须添加,否则运行时可能出错。此外,项目JDK版本应选择JDK 17,而Java语言服务可能需要更高版本的JDK,需分别配置。

MergeFile程序的设计与运行注意事项

MergeFile程序用于合并HDFS中非.abc后缀的文件,并排除子目录和输出文件本身。代码使用PathFilter过滤.abc文件,并在循环中跳过目录和merge.txt。程序按文件名排序后读取,使用输入输出流复制内容,不会添加额外分隔符。运行时需确保HDFS已启动,且输入文件存在。如果重复运行,输出文件会被覆盖。终端中的log4j警告可忽略,但出现异常需处理。

❓

Q&A

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

在Linux终端执行:cd /usr/local/hadoop,然后运行 ./bin/hdfs dfs -mkdir -p /user/hadoop。其中 -p 表示如果父目录不存在则一并创建,因为 /user/hadoop 是多级目录,必须使用 -p 参数。

HDFS的Web管理界面地址是什么?通过它能做什么?

Web界面访问地址是 http://localhost:9870。通过该页面可以查看文件系统中各个节点的分布信息,浏览名称节点上的存储、登录等日志,以及下载某个数据节点上的文件。该Web页面的所有功能都能通过Shell命令或Java API等价实现。

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

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

MergeFile程序的功能是什么?它如何过滤文件?

MergeFile程序读取HDFS中指定目录下后缀不为.abc的普通文件,将内容合并到merge.txt。它使用自定义的MyPathFilter类,通过正则表达式“.*\.abc”排除后缀为.abc的条目;在循环中再排除子目录和输出文件merge.txt本身。程序按文件名排序后逐一读取并写入输出流。

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

在TRAE中按Ctrl+Shift+P,搜索“export”,选择“Java: 导出到Jar文件...”,主类选择MergeFile,导出元素仅勾选项目的bin目录,点击确定。生成的JAR位于项目根目录。然后在终端创建部署目录并复制JAR:mkdir -p /usr/local/hadoop/myapp,cp 项目路径/HDFSExample.jar /usr/local/hadoop/myapp/。最后通过Hadoop运行:cd /usr/local/hadoop,./bin/hadoop jar ./myapp/HDFSExample.jar MergeFile。

运行MergeFile程序后,如何验证合并结果是否正确?

在Ubuntu终端执行:cd /usr/local/hadoop,然后运行 ./bin/hdfs dfs -ls /user/hadoop 查看是否生成了merge.txt,再运行 ./bin/hdfs dfs -cat /user/hadoop/merge.txt 查看内容。预期结果应包含file1.txt、file2.txt、file3.txt的内容,且.abc文件的内容不会写入。

🏷️

标签

➡️

继续阅读