您的位置:首页 > 其它

Storm相关脚本说明文档

2014-11-06 20:09 447 查看
博客公告:

 (1)本博客所有博客文章搬迁至《博客虫http://blogchong.com/

                     (2)文章对应的源码下载链接参考博客虫网站首页的“代码GIT”;

                      (3)更多的相关文章更新,以及代码等,请关注博客虫网站,网站中有技术Q群,以及代码共享链接。

                 (4)该博客内容还会继续更新,不过会慢一些。

该文档为实实在在的原创文档,转载请注明:

http://blog.sina.com.cn/s/blog_8c243ea30101j1e4.html

类型
详细
备注
该文档为storm相关脚本说明文档,包括集群免登陆脚本,操作ZK集群,及最重要的nimbus监控重启脚本。该部分附有源代码。
 
 
相关描述
²  其他相关文档请参考新浪博客http://blog.sina.com.cn/huangchongyuan

² 

²  部分文档涉及到源码,有需要的博客留言

² 欢迎加入storm-分布式-IT技术交流群(191321336,群中有详细的资料),一起讨论技术,一起分享代码,一起分享设计。

 

目录
Storm相关脚本说明文档... 1

1 文档说明... 2

2 相关脚本... 2

2.1 sshFreeLogin.sh. 2

2.1.1 脚本说明... 2

2.1.2 上代码... 2

2.2 optZk.sh. 3

2.2.1 脚本说明... 3

2.2.2 上代码... 3

2.3 monitorNimbus.sh. 4

2.3.1 脚本说明... 4

2.3.2 上代码... 4

3 寻求帮助... 5

3.1 原由... 5

3.2 问题... 5

3.2.1 metaq-client代码... 5

3.2.2 报错... 7

1 文档说明

 

老规矩了,习惯了在写文档前说点什么。写这个文档呢,是因为前几天在群中有人讨论关于nimbus没有自动重启机制,如何保证系统挂掉后重启的问题。刚好有朋友也问到了这个问题,就写了几个脚本,顺便写个文档说明说明。

顺便还写了个集群免登陆的脚本,及集群ZK操作的脚本。免登陆后再执行zk操作脚本,我们就可以在一台机子上启动集群的ZK、停止ZK及查看ZK状态等等。

关于nimbus监控脚本,只需要后台让他执行就行了,他会自动检测nimbus是否挂掉,如果挂掉就会重启他,有点像nimbus守护进程类似的东西,顺便还给他写了monitor监控的log,方便查询。

这些脚本都是原创的哦,刚写出来的,新鲜出炉的。

好了,就说这些了。

有兴趣和我一起讨论相关技术的加入我建的qq群:191321336

我的一些文档都会更新到我的blog上:http://blog.sina.com.cn/huangchongyuan(~_~来关注我吧),有兴趣的去看看,欢迎一起探讨技术。

 

2 相关脚本

 

2.1 sshFreeLogin.sh

 

2.1.1 脚本说明

 

该脚本用于ip之间免登陆设置,在storm集群中,往往很多时候只有一个操作界面,需要登录的其他节点进行操作,设置免登陆后,该操作会变的更简单。

该脚本会有一个ip.list配置列表。

 

2.1.2 上代码

Ip.list:

192.168.2.240

192.168.2.241

192.168.2.242

sshFreeLogin.sh:

#!/bin/bash

 

#author:  chongyuanHuang

#blog:             http://blog.sina.com.cn/huangchongyuan  

#QQgroup:     191321336

#E-mail:  874450476@qq.com

 

function Echo() {

        parameter=$1

        name=$2

        if [ $1 -ne 1 ]; then

               echo "Usage:  $2  ip.list"

               echo"       please input ip.list for freelogin and password next"

               exit 1

        fi     

}

 

function LocalSsh() {

        remote=$1

        echo"------------------------------------------------------------"

        echo "Begin to set Local-Remote free login!"

        ssh-keygen -t rsa -P ''

        scp /root/.ssh/id_rsa.pub  $1:/root/id_rsa.pub

        ssh $1 'cat /root/id_rsa.pub >>/root/.ssh/authorized_keys'

        ssh  $1 'chmod 600 /root/.ssh/authorized_keys'

        echo "Local-Remote free login set Ok!"

        echo"------------------------------------------------------------"

}

 

if [ $# -eq 1 ]; then

        num=`awk 'END{print NR}' $1`

        echo 'Set free login ip.list:'

 

        for ((i=1;i<=$num;i++)); do

                  ip=`cat $1 | sed -n ''$i'p'`

                  echo $ip

                  LocalSsh $ip

        done

else

        Echo $# $0

fi

 

2.2 optZk.sh

 

2.2.1 脚本说明

 

该脚本主要是ZK集群操作,配合免登陆设置,可以在一台机子上进行ZK集群的启动,停止及查看状态等操作。该脚本稍微改改就可以用于其它集群类型的操作。代码很简单,可以自己看看。

 

2.2.2 上代码

 

optZk.sh:

#!/bin/bash

 

#author:  chongyuanHuang

#blog:             http://blog.sina.com.cn/huangchongyuan  

#QQgroup:     191321336

#E-mail:  874450476@qq.com

 

function Echo() {

        parameter=$1

        name=$2

        if [ $parameter -ne 2 ]; then

               echo "Usage:  $name ip.list start/stop/status"

               echo"       please input ip.list opt"

               exit 1

        fi     

}

 

function optZk() {

        ip=$1

        opt=$2    

        echo"------------------------------------------------------------"

        echo "Begin to '$opt' '$ip' ZK:"

        ssh $1 '/usr/local/zookeeper/bin/zkServer.sh '$opt''

        echo"------------------------------------------------------------"

}

 

if [ $# -eq 2 ]; then

        num=`awk 'END{print NR}' $1`

 

        for ((i=1;i<=$num;i++)); do

                  ip=`cat $1 | sed -n ''$i'p'`

                  echo $ip

                  optZk $ip $2

        done

else

        Echo $# $0

fi

 

2.3 monitorNimbus.sh

 

2.3.1 脚本说明

 

该脚本用于nimbus的监控,只需后台执行该脚本,该脚本会自动监控nimbus的运行,当检测到挂掉以后,会自动重启,并且会把监控结果以log的形式保存下来。

 

2.3.2 上代码

 

MonitorNimbus.sh:

#!/bin/bash

 

#author:  chongyuanHuang

#blog:             http://blog.sina.com.cn/huangchongyuan  

#QQgroup:     191321336

#E-mail:  874450476@qq.com

 

function Init() {

        date=`date +%Y%m%d%H%M%S`

        echo ''$date': Begin monitor nimbus.' >monitorNimbus.log

}

 

function MonitorNimbus() {

        for ((;;)); do

                  num=`ps aux | grep nimbus | grep -v grep | wc -l`

                  if [ $num -eq 0 ]; then

                           date1=`date +%Y%m%d%H%M%S`

                           echo ''$date1': nimbus is down, and restarting!'>> monitorNimbus.log

                           storm nimbus&

                  fi

                  sleep 60

        done

        

}

 

Init

MonitorNimbus

exit 1

 

3 寻求帮助

 

3.1 原由

 

前几天一直在研究metaq,试图往metaq上写数据(已经启动ZK集群,及metaq集群,并且都保证集群启动成功,metaq也配置好了),但代码执行时出错了,纠结了很久。希望有朋友能够帮助我,有能指导的请博客留言,谢谢了。

 

3.2 问题

 

3.2.1 metaq-client代码

 

这是我的metaq写数据的代码:

final MetaClientConfig metaClientConfig = newMetaClientConfig();

final ZKConfig zkConfig = new ZKConfig();

zkConfig.zkConnect = "192.168.2.240:2181";

zkConfig.zkRoot = "/meta";

metaClientConfig.setZkConfig(zkConfig);

 

SendResult sendResult;

final MessageSessionFactory sessionFactory = newMetaMessageSessionFactory(metaClientConfig);

final MessageProducer producer =sessionFactory.createProducer();

                  // publish topic

          finalString topic = "meta-test";

          if(producer ==
null) {

                  System.out.println("produceris null");

          }else {

                  System.out.println("produceris:  " + producer);

          }

producer.publish(topic);

 

fis = new FileInputStream("test.log");

final BufferedReader reader = newBufferedReader(new InputStreamReader(fis, "UTF-8"));

String line = null;

while ((line = reader.readLine()) != null) {

        try{

              sendResult= producer.sendMessage(new Message(topic,line.getBytes()));

              if (sendResult.isSuccess()) {

                       System.out.println("Send message successfully,sent to "

                                         + "[" +
sendResult.getPartition() + "[");

                }
else {

                        System.err.println("Sendmessage failed,error message:"

                                         +sendResult.getErrorMessage());

                 }

         } catch (final Exception e) {

                e.printStackTrace();

          }

}

 

3.2.2 报错

 



PS:有知道的朋友指导一二,留个言,拜托了~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: