Ubuntu 上部署 HDFS 的常见配置问题与排查要点
一 环境与权限类问题
- 使用 root 启动被拒:Hadoop 3.x 默认禁止以 root 直接操作守护进程。推荐创建专用的 hadoop 用户并配置 SSH 免密登录;若确需 root,可在 $HADOOP_HOME/sbin/start-dfs.sh、stop-dfs.sh、start-yarn.sh、stop-yarn.sh 顶部显式声明用户变量(如:HDFS_NAMENODE_USER=root、HDFS_DATANODE_USER=root、YARN_RESOURCEMANAGER_USER=root、YARN_NODEMANAGER_USER=root),或通过 /etc/profile.d/ 设置同名环境变量后
source 使其生效。
- 命令未找到:未正确设置 HADOOP_HOME、PATH、HADOOP_CONF_DIR 等环境变量。建议在 ~/.bashrc 或 /etc/profile.d/ 中导出:
HADOOP_HOME=/usr/local/hadoop-x.y.z、PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin、HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop,执行 source 后用 hadoop version、hdfs version、which hadoop、which hdfs 验证。
- JAVA_HOME 未设置或路径错误:在 hadoop-env.sh 明确设置
export JAVA_HOME=...(如 /usr/lib/jvm/java-8-openjdk-amd64 或 /usr/lib/jvm/java-11-openjdk-amd64),并确认 java -version 正常。
- 目录权限与属主:HDFS 数据与日志目录应归属运行用户(如 hadoop:hadoop),必要时执行
chown -R hadoop:hadoop /usr/local/hadoop...;测试环境可临时放宽权限,但生产环境应按最小权限原则配置。
二 配置与启动类问题
- 配置文件语法与一致性:核对 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 的标签闭合、缩进与属性名;一处格式错误就可能导致启动失败。跨节点需保持关键配置一致(如 fs.defaultFS、dfs.replication、dfs.namenode.name.dir、dfs.datanode.data.dir)。
- 首次未格式化 NameNode:首次部署需执行
hdfs namenode -format 初始化元数据目录;重复格式化会清空 HDFS 数据,仅在首次或明确需要重置时执行。
- 进程未起来或缺失:用
jps 检查是否存在 NameNode、DataNode、SecondaryNameNode;若缺失,查看 $HADOOP_HOME/logs/ 下对应日志定位原因。
- SSH 免密未生效:集群脚本依赖节点间 SSH 免密。使用
ssh-keygen -t rsa 生成密钥,分发公钥到各节点(ssh-copy-id user@host),并验证 ssh host 无需口令。
- 端口与防火墙:确保 9000(HDFS RPC)、50070(NameNode Web UI)、8088(ResourceManager Web UI)等端口未被阻断;如使用 ufw,可执行
sudo ufw allow 9000,50070,8088。
三 网络与主机名解析问题
- 主机名与地址绑定错误:在 core-site.xml 的 fs.defaultFS 中应使用可被各节点解析的主机名或 IP(如 hdfs://namenode:9000 或 hdfs://192.168.x.x:9000);同时确保 /etc/hosts 或 DNS 正确解析所有节点的 主机名—IP。
- 端口占用或冲突:若 9000 等端口被占用,HDFS 将无法绑定;可用
netstat -tulpen | grep 9000 排查并释放占用进程或更换端口。
- 防火墙与安全组:云环境需放行相关端口;本地虚拟机需关闭或放行 ufw/iptables 对 Hadoop 端口的限制。
四 数据与存储路径问题
- 数据目录不存在或无权限:在 hdfs-site.xml 正确设置 dfs.namenode.name.dir 与 dfs.datanode.data.dir(如 /usr/local/hadoop/data/namenode、/usr/local/hadoop/data/datanode),并确认运行用户对目录具备读写权限;首次启动前可手动创建目录并
chown。
- 多次格式化导致数据丢失:仅在首次部署或明确重置时执行
hdfs namenode -format;重复格式化会清空 NameNode/DataNode 目录数据。
- 磁盘或内存资源不足:DataNode 写入失败或进程异常退出常与 磁盘空间不足 或 内存紧张 相关;检查
df -h、free -m,必要时扩容或清理。
- 权限校验导致访问被拒:HDFS 默认启用权限检查(如 AccessControlException)。测试环境可在 hdfs-site.xml 将 dfs.permissions 设为 false;生产环境应保留权限检查并按需配置 HDFS 超级用户组(supergroup) 与目录 ACL。
五 快速排查清单
- 核对环境:
echo $JAVA_HOME $HADOOP_HOME $PATH $HADOOP_CONF_DIR、java -version、hadoop version、hdfs version。
- 校验配置:
cat $HADOOP_HOME/etc/hadoop/{core-site.xml,hdfs-site.xml} 关键项;跨节点一致性。
- 检查进程:
jps 是否包含 NameNode/DataNode/SecondaryNameNode。
- 查看日志:
tail -f $HADOOP_HOME/logs/hadoop-*-namenode-*.log、...-datanode-*.log。
- 网络连通:
ping namenode、ssh namenode、netstat -tulpen | grep 9000。
- 防火墙:
sudo ufw status、sudo ufw allow 9000,50070,8088。
- 目录与权限:
ls -ld /usr/local/hadoop/data/{namenode,datanode}、chown -R hadoop:hadoop ...。
- 首次部署:确认已执行且仅执行一次
hdfs namenode -format。