Hadoop HDFS操作指南:Shell、Web UI、Java API实战
一、Shell命令行操作(client1,适合快速批量操作,基于 Linux 环境)
核心思路:
通过Hadoop提供的hadoop fs或hdfs dfs命令(两者等效)与 HDFS 交互,语法类似Linux文件命令,需注意区分本地路径和HDFS路径。
1. 进程管理
!!前提条件
- 已正确安装 Hadoop 并配置好环境变量(
$HADOOP_HOME已设置,可通过echo $HADOOP_HOME验证是否输出正确路径)。 - 若为分布式集群,需确保各节点间 SSH 免密登录已配置,且配置文件(如
core-site.xml、hdfs-site.xml等)正确无误。 - 操作需使用具有 Hadoop 操作权限的用户(通常为
hadoop或管理员用户)。
(1)一键启停 HDFS 集群
A. 启动 HDFS 集群
当需要启动集群时,执行以下命令:
$HADOOP_HOME/sbin/start-dfs.sh
说明:该命令会依次启动集群中的 NameNode(主节点)、DataNode(从节点,所有数据节点)和 SecondaryNameNode(辅助名称节点)。若为单节点伪分布式,会在本地启动所有进程;若为分布式,会远程启动各节点的对应进程。
执行效果如下:终端输出进程列表

B. 验证 HDFS 进程是否启动成功
jps
执行效果如下:

C. 关闭 HDFS 集群
当需要停止集群时,执行以下命令:
$HADOOP_HOME/sbin/stop-dfs.sh
说明:该命令会依次停止 SecondaryNameNode、DataNode、NameNode 进程,确保数据安全关闭。关闭后可再次执行 jps 验证,上述 HDFS 进程应已消失。
执行效果如下:

(2)单独控制进程(NameNode/SecondaryNameNode/DataNode)
# 示例:启动 NameNode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
# 示例:查看 DataNode 状态
$HADOOP_HOME/sbin/hadoop-daemon.sh status datanode
# 示例:停止 SecondaryNameNode
$HADOOP_HOME/sbin/hadoop-daemon.sh stop secondarynamenode
# 新版 HDFS 命令(等效用法)
hdfs --daemon start namenode
hdfs --daemon status datanode
hdfs --daemon stop secondarynamenode
执行效果如下:


2. 文件系统核心操作
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 目录创建 | hadoop fs -mkdir -p /hdfs_demo/input |
-p 表示递归创建,即使父目录不存在也会自动创建 |
| 文件上传 | hadoop fs -put local_file.txt /hdfs_demo/input |
将本地 local_file.txt 上传到 HDFS 路径 /hdfs_demo/input |
| 内容查看 | hadoop fs -cat /hdfs_demo/input/local_file.txt |
查看 HDFS 文件的完整内容 |
| 数据追加 | echo "new content" > append.txt && hadoop fs -appendToFile append.txt /hdfs_demo/input/local_file.txt |
先在本地创建 append.txt,再追加到 HDFS 文件中 |
| 文件复制 | hadoop fs -cp /hdfs_demo/input/local_file.txt /hdfs_demo/input/file_copy.txt |
复制文件并可重命名 |
| 移动 / 重命名 | hadoop fs -mv /hdfs_demo/input/file_copy.txt /hdfs_demo/input/file_rename.txt |
移动文件到新目录或直接重命名 |
| 本地下载 | hadoop fs -get /hdfs_demo/input/local_file.txt ./local_download/ |
将 HDFS 文件下载到本地 ./local_download/ 目录 |
| 删除文件 | hadoop fs -rm /hdfs_demo/input/file_rename.txt |
删除单个文件 |
| 删除目录 | hadoop fs -rm -r /hdfs_demo |
-r 表示递归删除目录及内部所有内容 |
(1)创建 HDFS 目录
操作目的:在 HDFS 上创建用于存储文件的目录(类似本地文件夹)。
执行以下命令:
# 创建一级目录(若父目录不存在会报错)
hadoop fs -mkdir /test_dir
# 创建多级目录(-p参数自动创建父目录,推荐)
hadoop fs -mkdir -p /hdfs_demo/input
#验证命令
hadoop fs -ls /
执行思路:HDFS 路径以/开头,-p参数确保即使/hdfs_demo不存在,也会先创建它,再创建input子目录。
执行效果如下:

(2)上传本地文件到 HDFS
操作目的:将 Linux 本地文件传输到 HDFS 的目标目录。
执行以下命令:
# 先在本地创建测试文件
echo "Hello HDFS" > local_test.txt
# 上传本地文件到HDFS的/hdfs_demo/input目录
hadoop fs -put local_test.txt /hdfs_demo/input/
#验证
hadoop fs -ls /hdfs_demo/input
执行思路:put命令格式为hadoop fs -put 本地路径 HDFS路径,若 HDFS 路径以/结尾,表示上传到该目录下(文件名不变)。
执行效果如下:

(3)查看 HDFS 文件内容
操作目的:验证文件是否成功上传,或查看文件内容。
执行以下命令:
# 查看HDFS文件内容
hadoop fs -cat /hdfs_demo/input/local_test.txt
执行效果如下:

(4)追加内容到 HDFS 文件
操作目的:向已存在的 HDFS 文件添加新内容(需确保 HDFS 配置允许追加,默认开启)。
执行以下命令:
# 本地创建待追加的内容文件
echo "Append this line" > append_content.txt
# 追加到HDFS文件
hadoop fs -appendToFile append_content.txt /hdfs_demo/input/local_test.txt
# 再次查看验证
hadoop fs -cat /hdfs_demo/input/local_test.txt
执行效果如下:

(5)复制 HDFS 中的文件(HDFS 内部复制)
操作目的:在 HDFS 内部复制文件到其他目录(类似本地 cp 命令)。
执行以下命令:
# 复制 HDFS 中的 local_test.txt 到 /test_dir 目录(文件名不变)
hadoop fs -cp /hdfs_demo/input/local_test.txt /test_dir/
# 复制并改名(复制到 /test_dir 并命名为 copied_file.txt)
hadoop fs -cp /hdfs_demo/input/local_test.txt /test_dir/copied_file.txt
# 验证:查看 /test_dir 目录
hadoop fs -ls /test_dir
执行思路:-cp 命令格式为 hadoop fs -cp HDFS源路径 HDFS目标路径,若目标路径是目录,文件会以原名复制到该目录;若指定新文件名,则会重命名。
注意:直接复制到新文件名会报错,要先另创建新文件夹并命名。

执行效果如下:

(6)移动 HDFS 中的文件(HDFS 内部移动 / 重命名)
操作目的:在 HDFS 内部移动文件(类似本地 mv 命令,可用于重命名)。
执行以下命令:
# 移动 /test_dir/copied_file.txt 到 /hdfs_demo 目录(文件名不变)
hadoop fs -mv /test_dir/copied_file.txt /hdfs_demo/
# 重命名 HDFS 中的文件(将 local_test.txt 改名为 renamed_test.txt)
hadoop fs -mv /hdfs_demo/input/local_test.txt /hdfs_demo/input/renamed_test.txt
# 验证:查看移动和重命名后的结果
hadoop fs -ls /hdfs_demo
hadoop fs -ls /hdfs_demo/input
执行思路:-mv 命令既可移动文件到其他目录,也可直接重命名(目标路径为同一目录下的新文件名),原文件会被删除。
执行效果如下:

(7)从 HDFS 下载文件到本地
操作目的:将 HDFS 中的文件下载到 Linux 本地目录(类似 get 命令)。
执行以下命令:
# 下载 HDFS 中的 renamed_test.txt 到本地当前目录(文件名不变)
hadoop fs -get /hdfs_demo/input/renamed_test.txt ./
# 下载并改名(下载到本地并命名为 downloaded_file.txt)
hadoop fs -get /hdfs_demo/input/renamed_test.txt ./downloaded_file.txt
# 验证:查看本地文件
ls -l ./renamed_test.txt ./downloaded_file.txt
cat ./downloaded_file.txt
执行思路:-get 命令格式为 hadoop fs -get HDFS路径 本地路径,若本地路径是目录,文件会以原名下载到该目录;若指定新文件名,则会重命名。
执行效果如下:

(8)删除 HDFS 中的文件或目录
操作目的:清理 HDFS 中不需要的文件或目录(谨慎操作!)。
执行以下命令:
# 删除 HDFS 中的单个文件
hadoop fs -rm /hdfs_demo/copied_file.txt
# 删除空目录(若目录非空会报错)
hadoop fs -rmdir /test_dir # 需确保 /test_dir 中已无文件
# 强制删除非空目录及所有内容(-r 递归删除,-f 强制不提示)
hadoop fs -rm -r -f /hdfs_demo/input
# 验证:查看根目录,确认文件/目录已删除
hadoop fs -ls /
执行思路:
- 删除文件用
-rm,删除空目录用-rmdir; - 非空目录必须用
-rm -r(递归删除),加-f可跳过确认提示。
执行效果如下:

二、Web界面操作(client2,9870端口)
1. 访问 Web UI
Hadoop 3.x 及以上版本:在浏览器输入 http://<namenode-ip>:9870(如 http://192.168.142.131:9870)。
验证路径方法:
(1)查看配置文件
# 打开 HDFS 配置文件 hdfs-site.xml
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在文件中查找 <property> 标签下的 dfs.namenode.http-address 配置,示例如下:
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:9870</value> <!-- 这里的 localhost 和 9870 就是 Web 界面的主机和端口 -->
</property>
执行效果如下:

因为Hadoop 版本是 3.x 系列,HDFS Web 界面的默认端口是 9870,无需在配置文件中显式配置也能直接访问。
按以下步骤验证:
【步骤 1】确认 NameNode 进程正常运行
jps
需包含 NameNode 进程(若未运行,执行 start-dfs.sh 启动)。
【步骤 2】验证 9870 端口是否监听
netstat -tuln | grep 9870
若输出 LISTEN,说明端口正常开放。
执行效果如下:

(2)命令行查询
直接通过 Hadoop 命令获取配置项:
hadoop fs -getconf -confKey dfs.namenode.http-address
执行后会输出类似 localhost:9870 的结果,其中 localhost 是主机名,9870 是 HDFS Web 界面的端口。
执行效果如下:

不同 Hadoop 版本的命令参数可能略有差异,本版本中hadoop fs -getconf不支持直接查询配置项,换一种方式获取 HDFS Web 界面地址:
【方法 1】直接查看hdfs-site.xml配置文件
# 搜索HDFS Web界面的配置项( namenode http地址 )
grep "dfs.namenode.http-address" $HADOOP_HOME/etc/hadoop/hdfs-site.xml
输出类似:
<name>dfs.namenode.http-address</name>
<value>localhost:9870</value> <!-- 这里的localhost:9870就是Web地址 -->
【方法 2】查看 Hadoop 默认配置(若未手动修改过)
Hadoop 3.x 版本默认的 HDFS Web 界面端口为9870,主机为当前节点的主机名或 IP,因此默认地址为:
http://localhost:9870
或使用本机 IP(例如你的 IP 是 192.168.195.133):
http://192.168.195.133:9870
执行效果如下:

2. 网页端文件操作
(1) 进入 Web UI 后,点击顶部菜单 Utilities → Browse the file system。

(2)在文件浏览页面,可执行以下操作:
创建文件夹:点击 “新建文件夹” 图标,输入目录名即可。
上传文件:点击 “上传文件” 图标,选择本地文件上传。
删除文件 / 目录:勾选目标文件 / 目录,点击 “删除” 按钮。
返回上级目录:点击 “返回” 图标即可。

三、Java API 操作(client3,IDEA + Big Data Tools 插件)
1. 本地环境准备(Windows)
(1)解压 Hadoop 安装包
下载 Hadoop 安装包(如 hadoop-3.3.6.tar.gz),解压到本地路径(如 G:\Edge\hadoop-3.3.6)。若解压时提示需要管理员权限,按住 Shift 键右键选择 “以管理员身份解压”。
(2)配置系统环境变量
A. 右键 “此电脑”→“属性”→“高级系统设置”→“环境变量”。

B. 新建系统变量 HADOOP_HOME,值为G:\Edge\hadoop-3.3.6(以实际解压路径为准)。

C. 编辑系统变量 Path,添加 %HADOOP_HOME%\bin。

(3)下载并放置依赖文件
下载 hadoop.dll 和 winutils.exe
(地址:https://github.com/steveloughran/winutils/blob/master/hadoop-3.0.0/bin/hadoop.dll
https://github.com/steveloughran/winutils/blob/master/hadoop-3.0.0/bin/winutils.exe
),并将其放入 G:\Edge\hadoop-3.3.6\bin 目录。


2. IDEA 插件安装与配置
(1) 安装 Big Data Tools 插件打开 IDEA → 点击 “File”→“Settings”→“Plugins”→ 搜索 “Big Data Tools”→ 安装后重启 IDEA。

(2) 步骤 2:配置 HDFS 连接
A. 重启 IDEA 后,点击右侧 “Big Data Tools” 面板 → 点击 “+”→ 选择 “HDFS”。

B. 配置连接信息
可以通过配置文件目录Configuration files directory或者显式 URIExplicit uri来连接:

Explicit uri:意为 “显式 URI”,即直接通过手动输入 HDFS 集群的完整连接地址(如hdfs://localhost:9000)来建立连接,需要手动配置 NameNode 的主机、端口等信息。Configuration files directory:意为 “配置文件目录”,即通过指定 Hadoop 安装目录下的etc/hadoop文件夹(包含core-site.xml、hdfs-site.xml等核心配置文件),让插件自动读取配置信息来连接 HDFS。
简单来说,你可以根据自己的需求选择:如果清楚 HDFS 的 URI 地址,选 Explicit uri 手动输入;如果有现成的 Hadoop 配置文件,选 Configuration files directory 更便捷。
若连接失败,可尝试指定本地 Hadoop 配置目录:在 “Configuration Directory” 中选择 E:\hadoop-3.3.6\etc\hadoop,插件会自动读取配置文件连接 HDFS。

四、三种操作方式的选择与整合
| 场景需求 | 推荐操作方式 | 优势 |
|---|---|---|
| 批量脚本执行 | Shell 命令行 | 效率高、适合自动化运维任务 |
| 可视化监控 / 简单操作 | Web 界面 | 无需命令行基础,直观易操作 |
| 开发集成 / 自定义逻辑 | Java API(IDEA) | 可深度集成业务逻辑,支持复杂自动化任务 |
在实际项目中,可结合使用:例如用 Java 代码构建核心业务逻辑,用 Shell 命令行做调试和批量任务,用 Web 界面监控集群状态。
更多推荐

所有评论(0)