在 CentOS 上连接 HDFS(Hadoop Distributed File System),通常有两种常见方式:
✅ 命令行方式(最常用)
✅ Java / WebHDFS / HTTP 方式(程序访问)
下面我按 从零到可用 给你一个完整说明。
在 CentOS 上连接 HDFS,必须满足以下条件之一:
hdfs-site.xml、core-site.xml# 示例:解压 Hadoop
tar -zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 /usr/local/hadoop
配置环境变量:
vi ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
编辑:
$HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode-host:8020</value>
</property>
</configuration>
如果是 Hadoop 3.x,NameNode 端口常见是 8020 或 9870
hdfs dfs -ls /
✅ 成功示例:
Found 3 items
drwxr-xr-x - root supergroup 0 2024-01-01 /tmp
drwxr-xr-x - root supergroup 0 2024-01-01 /user
# 上传文件
hdfs dfs -put localfile.txt /user/
# 下载文件
hdfs dfs -get /user/localfile.txt ./
# 创建目录
hdfs dfs -mkdir /test
# 查看文件
hdfs dfs -cat /test/test.txt
# 删除文件
hdfs dfs -rm /test/test.txt
hdfs-site.xml:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
curl "http://namenode-host:9870/webhdfs/v1/user?op=LISTSTATUS"
✅ 适合:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.6</version>
</dependency>
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://namenode-host:8020");
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/test.txt");
FSDataInputStream in = fs.open(path);
IOUtils.copyBytes(in, System.out, 4096, false);
Connection refused
✅ 检查:
systemctl stop firewalld
Permission denied
✅ 解决:
hdfs dfs -chmod 777 /user
或以正确用户运行:
sudo -u hdfs hdfs dfs -ls /
UnknownHostException
✅ 修改 /etc/hosts:
192.168.1.10 namenode-host
| 方式 | 适用场景 |
|---|---|
hdfs dfs 命令 |
运维、日常操作 ✅ |
| WebHDFS | 脚本、HTTP 调用 |
| Java API | 开发程序 |
如果你愿意,可以告诉我:
我可以给你 精确到命令级别 的配置方案。