背景说明
前段时间配置了一组3节点的hadoop集群,当时采用了先配置一个、然后SCP拷贝的方式。
当时的配置仅包含了hdfs和yarn部分,其中“bigdata121”机器为NameNode、SeconderyNameNode和ResourceManager,而“bigdata122”、“bigdata123”为DataNode和NodeManager。
问题出现
考虑到集群规划的合理性,打算将ResourceManager改到bigdata122机器上,基本操作都没有问题,仅需修改所有节点**(注意是所有节点)**的 $HADOOP_HOME/etc/hadoop/yarn-site.xml,将yarn.resourcemanager.hostname 的值由 bigdata121 改为 bigdata122。
>>> cat yarn-site.xml
<?xml version="1.0"?>
## 省略前面内容
<configuration>
<!-- Site specific YARN configuration properties -->
<!--配置Yarn的节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata122</value> # 就是改这里!
</property>
## 省略后面内容
</configuration>
按理来说,修改完xml,再关闭集群后,应该就能从122 机器上通过start-yarn.sh 命令来启动 yarn 了。
但是,现实显然又比理想骨感了一次:
>>> start-yarn.sh
-bash: start-yarn.sh: command not found
新RM无法启动yarn也就算了,更气人的是:
在原来的 RM 也就是 121 机器上使用该命令时,却依然能够启动 yarn!
问题剖析
冷静下来,仔细观察后,还是发现了一些不同:
通过121启动的yarn,只是在121和123机器上启动了 NodeManager!
如此看来,修改RM的操作应该是没有问题,应该是其他方面出了纰漏。
经过翻阅前面配置集群时的笔记,终于找到了答案:
没有在 ~/.bash_profile 中添加 环境变量 $HADOOP_HOME !
再次老实交代我当时的配置过程:
1.在121机器配置 JAVA_HOME 后,克隆了两台机器作为NN/DM,即122、123;
2.在121机器配置 $HADOOP_HOME ;
3.在121机器配置/opt/moudle/hadoop-2.7.3/etc/hadoop下的各种site文件,然后通过SCP拷贝方式同步到 2 台克隆机器。
这样一捋就清楚了,唯独中间的 配置 $HADOOP_HOME 环节,仅针对了 121 机器,也就导致只有121机器能够识别 star-xxx 系列命令。
解决
只需要在 122 机器上同样修改 ~/.bash_profile 即可。
vi 编辑,增加如下内容:
HADOOP_HOME=/opt/moudle/hadoop-2.7.3
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
然后,source 使对环境变量的更改生效:
>>> source ~/.bash_profile
然后,再尝试 start-yarn.sh 命令,已能成功运行,至此问题解决。