如何配置伪分布式Hadoop连接回环接口以避免DHCP IP变更失败
解决DHCP环境下伪分布式Hadoop任务因IP变更失败的问题
哥们,你这个问题我太熟了——DHCP自动换IP确实会坑长时间运行的Hadoop任务,不过完全可以通过配置回环地址或者主机名映射来解决,下面给你一步步说具体操作:
方法一:直接配置Hadoop使用回环地址(127.0.0.1/localhost)
这种方法最直接,让Hadoop所有组件都通过本地回环通信,彻底避开外部IP变更的影响,需要修改以下几个核心配置文件:
1. 修改 core-site.xml
找到Hadoop配置目录(一般是$HADOOP_HOME/etc/hadoop)下的这个文件,添加/修改以下配置:
<configuration> <!-- 指定HDFS的默认访问路径,用localhost代替IP --> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <!-- 指定Hadoop临时文件存储路径,建议设为固定目录,避免系统临时目录清理出问题 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp</value> </property> </configuration>
2. 修改 hdfs-site.xml
调整HDFS相关组件的绑定地址为localhost:
<configuration> <!-- 副本数,伪分布式设为1即可 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- NameNode HTTP访问地址 --> <property> <name>dfs.namenode.http-address</name> <value>localhost:50070</value> </property> <!-- DataNode服务地址 --> <property> <name>dfs.datanode.address</name> <value>localhost:50010</value> </property> <!-- secondary NameNode HTTP地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>localhost:50090</value> </property> </configuration>
3. 修改 mapred-site.xml
如果是从模板复制的,先把mapred-site.xml.template改名为mapred-site.xml,然后添加:
<configuration> <!-- 指定MapReduce框架使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 任务历史服务器地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>localhost:10020</value> </property> <!-- 任务历史服务器Web地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>localhost:19888</value> </property> </configuration>
4. 修改 yarn-site.xml
调整YARN组件的绑定地址:
<configuration> <!-- 指定YARN的ResourceManager地址 --> <property> <name>yarn.resourcemanager.address</name> <value>localhost:8032</value> </property> <!-- ResourceManager Web访问地址 --> <property> <name>yarn.resourcemanager.webapp.address</name> <value>localhost:8088</value> </property> <!-- NodeManager服务地址 --> <property> <name>yarn.nodemanager.address</name> <value>localhost:8040</value> </property> <!-- NodeManager Web访问地址 --> <property> <name>yarn.nodemanager.webapp.address</name> <value>localhost:8042</value> </property> <!-- NodeManager运行MapReduce任务的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
方法二:固定主机名到回环地址的映射(更灵活)
如果不想全用localhost,也可以把你的主机名绑定到127.0.0.1,让Hadoop用主机名通信:
- 编辑
/etc/hosts文件,添加一行:
127.0.0.1 your-hostname
把your-hostname换成你实际的主机名(可以用hostname命令查看)。
- 然后把上面配置文件里的
localhost全换成你的主机名就行,效果和用回环地址一样,而且后续如果需要调整,改hosts更方便。
最后要做的收尾操作
- 先停止所有Hadoop服务(如果之前启动着):
stop-all.sh # 或者分别停止: stop-dfs.sh stop-yarn.sh mr-jobhistory-daemon.sh stop historyserver
- 格式化NameNode(注意:如果之前有数据,先备份好
hadoop.tmp.dir指定的目录,格式化会清空数据):
hdfs namenode -format
- 重新启动所有服务:
start-all.sh # 或者分别启动: start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
这样配置后,Hadoop所有组件都通过本地回环或者固定的主机名通信,不管DHCP怎么换外部IP,都不会影响任务运行了,长时间任务也能稳定跑完。
内容的提问来源于stack exchange,提问作者Nord
相关产品推荐
相关产品推荐

