You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何搭建可同时运行的3节点HDFS DataNode集群?

Hadoop3.3.5多DataNode启动PID冲突问题解决

问题描述

执行命令./bin/hdfs datanode -conf ./etc/hadoop/datanode1.xml可正常启动单个DataNode,但启动第二个DataNode时出现如下报错:

datanode is running as process. Stop it first and ensure /tmp/hadoop-user-datanode.pid file is empty before retry.

环境:Hadoop3.3.5

相关配置文件

core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
       <name>dfs.replication</name>
       <value>3</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/user/code/hdfs/namenode/</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/user/code/hdfs/datanode1,/home/user/code/hdfs/datanode2,/home/user/code/hdfs/datanode3</value>
    </property>
</configuration>

datanode1.xml

<configuration>
    <property>
        <name>dfs.datanode.address</name>
        <value>0.0.0.0:9011</value>
    </property>
    <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:9076</value>
    </property>
    <property>
        <name>dfs.datanode.ipc.address</name>
        <value>0.0.0.0:9021</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/user/code/hdfs/datanode1/</value>
    </property>
</configuration>

datanode2.xml

<configuration>
    <property>
        <name>dfs.datanode.address</name>
        <value>0.0.0.0:9012</value>
    </property>
    <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:9077</value>
    </property>
    <property>
        <name>dfs.datanode.ipc.address</name>
        <value>0.0.0.0:9022</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/user/code/hdfs/datanode2/</value>
    </property>
</configuration>

datanode3.xml

<configuration>
    <property>
        <name>dfs.datanode.address</name>
        <value>0.0.0.0:9013</value>
    </property>
    <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:9078</value>
    </property>
    <property>
        <name>dfs.datanode.ipc.address</name>
        <value>0.0.0.0:9023</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/user/code/hdfs/datanode3/</value>
    </property>
</configuration>

解决方案

1. 给每个DataNode配置独立PID目录

分别修改三个DataNode的配置文件,添加dfs.datanode.pid.dir属性,指定不同的PID存储路径:

datanode1.xml新增配置

<property>
    <name>dfs.datanode.pid.dir</name>
    <value>/home/user/code/hdfs/datanode_pid/datanode1</value>
</property>

datanode2.xml新增配置

<property>
    <name>dfs.datanode.pid.dir</name>
    <value>/home/user/code/hdfs/datanode_pid/datanode2</value>
</property>

datanode3.xml新增配置

<property>
    <name>dfs.datanode.pid.dir</name>
    <value>/home/user/code/hdfs/datanode_pid/datanode3</value>
</property>

2. 创建PID目录并设置权限

执行以下命令创建目录,确保Hadoop运行用户拥有读写权限:

mkdir -p /home/user/code/hdfs/datanode_pid/datanode1
mkdir -p /home/user/code/hdfs/datanode_pid/datanode2
mkdir -p /home/user/code/hdfs/datanode_pid/datanode3
chown -R user:user /home/user/code/hdfs/datanode_pid

3. 重启并启动DataNode

先停止已运行的DataNode,再依次启动三个DataNode实例即可正常运行。

问题原因

Hadoop默认将DataNode的PID文件存放在/tmp目录,文件名格式为hadoop-{用户名}-datanode.pid。多个DataNode实例会共用同一个PID文件,导致系统误判为已有DataNode在运行,从而触发报错。给每个DataNode指定独立的PID目录,就能避免这种文件冲突。

内容的提问来源于stack exchange,提问作者Pypthon3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:57:57