如何搭建可同时运行的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
相关产品推荐
相关产品推荐

