记录hadoop namenode Port in use: node2:9870

记录hadoop namenode死活起不来,各种方法试遍了,简直要奔溃,

MD!!!  生气!!

言归正传 说问题

配置 etc/hadoop/hdfs-site.xml 


<configuration>
<!-- nn web端访问地址-->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>node2:9870</value>
        </property>
        <!-- 2nn web端访问地址-->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>node1:9868</value>
        </property>

</configuration>

配置etc/hadoop/core-site.xml 

<configuration>
 <!-- 指定NameNode的地址 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://node2:8020</value>
        </property>

    <!-- 指定hadoop数据的存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/soft/hadoop/hadoop/data</value>
        </property>
<!-- 配置HDFS网页登录使用的静态用户为hadoop -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>
</configuration>

namenode初始化。

hdfs namenode -format

启动。

sbin/start-dfs.sh 

在node2服务器 jps 查看 : datanode 已经起来了。但是没有namenode

查看logs下面的namenode.log

显示namenode端口被占用

namenode Port in use: node2:9870

这时候去排查9870端口占用情况 

发现并没有

……

再次格式化NameNode

这时会产生新的集群id导致NameNode和DataNode的集群id不一致,集群不到已数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要停止namenode和datanode进程,并且要删除所有机器的datalogs目录,然后再进行格式化。

这个问题卡了我三天

 解决办法

修改namenode所在服务器的hosts 我的是在node2上

vim /etc/hosts

把hosts 里面的 node2公网ip 换成私网ip

换完后。启动

sbin/start-dfs.sh 

问题解决

<think>好的,用户遇到了Hadoop集群中datanodenode1无法启动的问题,而node2node3正常。我需要根据提供的引用和Hadoop知识来帮助排查这个问题。首先,要明确用户的环境,他们可能是在使用类似CDH的集群,涉及多节点配置,比如node1、node2和slave节点。根据引用[2],用户提到在cdh5node1、cdh5node2、cdh5slave上启动nodemanager服务,但这里的问题是关于datanode的启动。可能用户混淆了nodemanager和datanode,不过更可能的是datanode启动失败。需要检查启动命令是否正确,是否在正确的节点上执行了正确的服务启动脚本,比如是否使用了hadoop-daemon.shstart datanode或者hdfs脚本。接下来,引用[1]中的代码涉及到addDatanode方法,这里往datanodeMap、host2DatanodeMap和网络拓扑中添加节点。如果node1的datanode无法注册到namenode,可能是namenode的host2DatanodeMap中已经有相同的UUID或主机名,导致冲突。需要检查node1的datanode是否之前已经注册过,或者UUID重复,导致无法添加。这可能导致namenode拒绝node1的注册请求,进而无法启动。引用[3]提到datanode的注册和心跳机制,如果node1无法启动,可能在注册阶段就失败了。需要查看node1的日志,通常在logs目录下的hadoop-*-datanode-*.log文件,检查是否有异常,比如连接拒绝、权限问题、端口冲突等。例如,如果namenode的IPC端口(默认8020)或datanode的端口(默认50010)被占用,或者防火墙阻止了通信,会导致注册失败。另外,引用[4]中DataXceiverServer的初始化问题也可能导致datanode无法启动。如果node1的DataXceiverServer无法绑定端口,可能是端口被占用,或者配置错误,比如网络接口配置不正确。需要检查datanode的配置文件,如hdfs-site.xml中的dfs.datanode.address、dfs.datanode.ipc.address等配置项是否正确,是否与其他服务冲突。还需要考虑网络问题,比如node1到namenode的网络连通性,主机名解析是否正确。如果node1的主机名在/etc/hosts中没有正确映射到IP地址,或者DNS解析有问题,可能导致datanode无法连接到namenode。此外,SSH无密码登录是否配置,虽然datanode启动不依赖SSH,但集群管理脚本可能需要。权限问题也是一个常见因素。检查node1的数据目录(如dfs.datanode.data.dir)的权限是否正确,是否属于运行datanode进程的用户。如果目录权限不足,datanode可能无法写入数据,导致启动失败。另外,配置文件的一致性很重要。确认node1上的hdfs-site.xml、core-site.xml等配置与其他节点一致,特别是namenode的地址、端口,以及datanode的相关配置。例如,namenode的RPC地址是否正确,是否所有节点使用相同的Hadoop版本,避免版本不兼容。如果node1之前曾经加入过集群,可能存在残留的元数据。在datanode的数据目录中,可能有VERSION文件,里面记录了clusterID、datanodeUUID等信息。如果这个clusterID与namenode的clusterID不一致,会导致datanode无法注册。需要检查并确保两者一致,或者清理数据目录后重新格式化(注意数据备份)。 总结下来,排查步骤可能包括:检查日志错误,确认配置一致性,验证网络连接,检查端口占用,权限问题,以及UUID或clusterID冲突等。需要逐步排除这些可能性,定位具体原因。</think>排查Hadoop集群中DataNodenode1无法启动的问题,可按照以下步骤逐步分析: --- ### 一、检查启动日志 1. **查看DataNode日志** ```bash tail -n 100 /opt/hadoop/logs/hadoop-*-datanode-node1.log ``` - 关键错误示例: - `java.net.BindException: Port in use`(端口冲突)[^4] - `Permission denied`(目录权限问题) - `Could not connect to NameNode`(网络或配置错误)[^3] --- ### 二、验证基础配置 2. **核对关键配置项** - **core-site.xml**:确保`fs.defaultFS`指向正确的NameNode地址,如`hdfs://namenode:8020` - **hdfs-site.xml**: - `dfs.datanode.data.dir`(数据目录权限需正确) - `dfs.datanode.address`(默认50010端口是否被占用)[^4] --- ### 三、排查网络与端口 3. **测试NameNode连通性** ```bash telnet namenode 8020 # NameNode RPC端口 ``` - 若不通,需检查防火墙或安全组规则 - 确认node1的主机名解析正确(`/etc/hosts`或DNS) 4. **检查端口占用** ```bash netstat -tuln | grep 50010 # DataNode数据传输端口 ``` --- ### 四、检查元数据冲突 5. **清理旧数据目录** - 删除`dfs.datanode.data.dir`目录下的所有文件(**先备份**) - 原因:若`VERSION`文件中`clusterID`与NameNode不一致,会导致注册失败[^1] --- ### 五、验证启动命令 6. **手动启动DataNode** ```bash hadoop-daemon.sh start datanode # 或 hdfs --daemon start datanode ``` - 对比node2/node3的启动方式,确认无脚本差异[^2] --- ### 六、特殊场景分析 7. **UUID冲突问题** - 引用[^1]中`datanodeMap.put(node.getDatanodeUuid(), node)`表明NameNode记录UUID - 若node1的`datanodeUuid`重复,需删除`current/VERSION`文件后重启 --- ### 典型错误案例 - **案例1**:日志显示`InvalidTopologyException` - 原因:`networktopology.add(node)`失败[^1] - 解决:检查`racks`配置是否包含node1的机架信息 - **案例2**:`DataXceiverServer`初始化失败[^4] - 原因:端口被占用或线程组配置错误 - 解决:更换端口或检查`dfs.datanode.address` --- ### 总结步骤 1. 日志分析 → 2. 配置核对 → 3. 网络/端口检查 → 4. 元数据清理 → 5. 手动启动验证 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值