`
zhouchaofei2010
  • 浏览: 1086036 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

脚本启动zookeeper集群需要的特别配置

阅读更多
我写了一个启动zookeeper的脚本d.sh。启动时提示成功了不了,但实际上没有成功
脚本:
脚本很简单内容如下:
[root@crxy1 local]# more d.sh 
#!/bin/sh 

echo "start zkServer..." 
for i in 1 2 3 
do 
ssh crxy$i "/usr/local/zookeeper/bin/zkServer.sh start" 
done 


 
jps查看进程
[root@crxy1 local]# jps 
3347 Jps
没有QuorumPeerMain 进程,实际没有启动成功
如果手工执行,/usr/local/zookeeper/bin/zkServer.sh start
会真正成功启动,jps有QuorumPeerMain进程:
 
[root@crxy1 local]# jps 
3376 QuorumPeerMain 
3394 Jps
 
这是个怎么回事呢?
------------------------------------------------
原因:
首先需要知道 交互式shell和非交互式shell、登录shell和非登录shell是有区别的
在登录shell里,环境信息需要读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
在非登录shell里,环境信息只读取 /etc/bash.bashrc和~/.bashrc
手工执行是属于登陆shell,脚本执行数据非登陆shell,而我的linux环境配置中只对/etc/profile进行了jdk1.7等环境的配置,所以脚本执行/usr/local/zookeeper/bin/zkServer.sh start 启动zookeeper失败了
 
 
解决方法(下面3个方法任选1):
1、脚本代码中添加“source /etc/profile;” 改为:ssh crxy$i "source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start" 
2、把profile的配置信息echo到.bashrc中  echo 'source /etc/profile' >> ~/.bashrc
3、在/zookeeper/bin/zkEnv.sh的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.7.0_45(就像hadoop中对hadoop-env.sh的配置一样)
 解决了这个问题,就以方便的通过脚本实现hadoop集群的启动与关闭了,避免了繁琐的手工操作^-^
 
感谢:
特别感谢超人学院的吴超老师,要不是老师斩钉截铁的跟我说“如果还是这个观点的话,那肯定还是找不到问题所在”,我可能会简单的错误认为那是zookeeper的bug
特别感谢就业班中的 @【3】胡涛  @【2】金苏华  @【3】唐斌 @【3】王晓东 等同学的热心帮助
 
 
 
 
 
  • 大小: 171.1 KB
2
2
分享到:
评论
2 楼 zhouchaofei2010 2014-09-14  
jonsen_hb 写道
写的挺好的,都忙那么晚了

谢谢
1 楼 jonsen_hb 2014-09-12  
写的挺好的,都忙那么晚了

相关推荐

Global site tag (gtag.js) - Google Analytics