Storm简单介绍:
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟主机、营销软件、网站建设、边坝网站维护、网站推广。
Storm是一个开源的分布式实时计算框架,最初是由Twitter开发的,现在是Apache的顶级项目之一。Storm适用于处理潜在无限的流式数据。Storm之与实时数据计算相当于Hadoop之与批处理。
Storm特点:
简单的编程模型:类似于MapReduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
容错性:Storm会管理工作进程和节点的故障。
水平扩展:计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理:Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
快速:系统的设计保证了消息能得到快速的处理,使用MQ作为其底层消息队列。
多语言支持:你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python,要增加对其他语言的支持,只需实现一个简单的Storm通信协议即。
Storm处理流程:
Storm的适用场景:
(1) 信息流处理(Stream Processing) :Storm可以用来实时处理新数据和更新数据库,兼具容错性和可扩展性。
(2) 连续计算(Continuous Computation) :Storm可以进行连续查询并把结果即时反馈给客户,比如将Twitter上的热门话题发送到客户端。
(3) 分布式远程过程调用(Distributed RPC) :Storm可以用来并行处理密集查询,Storm的拓扑结构(后文会介绍)是一个等待调用信息的分布函数,当它收到一条调用信息后,会对查询进行计算,并返回查询结果。
Storm部署:
搭建步骤:
- 安装zookeeper
- 安装storm
- 启动storm
- 访问storm ui
安装zookeeper
安装脚本:
#!/bin/bash name=zookeeper1 SERVER_ID=1 HOST1=192.168.1.1 port=22181 p_w_picpath=docker.ttxsgoto.com:5000/zk.ttxsgoto.com:v20160712 run(){ docker run -d \ --name $name \ -e "SERVER_ID=$SERVER_ID" \ -e "ADDITIONAL_ZOOKEEPER_1=server.1=$HOST1:2181:3181" \ -p ${port}:2181 \ -v /opt/zookeeper/data:/opt/zookeeper/data \ $p_w_picpath } pullp_w_picpath(){ docker pull $p_w_picpath if [ $? -ne 0 ];then echo "Docker pull $p_w_picpath fail." exit 1 fi } case $1 in deploy) pullp_w_picpath run ;; stop) docker stop $name ;; rm) docker stop $name docker rm $name ;; start) docker start $name ;; redeploy) pullp_w_picpath docker stop $name docker rm $name run ;; *) echo "Usage $0 [deploy|start|stop|rm|redeploy]" ;; esac
1.需修改脚本中SERVER_ID,HOST1,port
2.添加执行权限并执行chmod +x zkstart.sh && ./zkstart.sh deploy
安装storm
安装脚本:
#!/bin/bash if [ -z "$1" ]; then echo "Usage error exit" echo "./build.sh [appname] [ver]" exit 2 fi if [ -z "$2" ]; then echo "Usage error please input docker version . exit" echo "./build.sh [appname] [ver]" exit 2 fi docker build --no-cache=true -t docker.ttxsgoto.com:5000/$1.ttxsgoto.com:$2 . docker push docker.ttxsgoto.com:5000/$1.ttxsgoto.com:$2 d=`date "+[%Y-%m-%d %H:%M:%S]"` echo -e "$d\t$*" >> build.txt
1.添加执行权限 chmod +x build.sh
2.传参数执行脚本(eg: ./build.sh storm v20160712)
PS:deploy/redeploy之前需要修改/etc/hosts文件,更新nimbus节点的hostname和ip的映射关系。
storm 启动
启动脚本:
#!/bin/bash p_w_picpath="docker.ttxsgoto.com:5000/$1.ttxsgoto.com:$2" log="/var/logs/$1.ttxsgoto.com.$2.$3" port=$5 name=$3 mode=$4 run(){ docker run --net=host -it -d \ --name $name \ -v $log:/opt/apache-storm-1.0.1/logs \ "$p_w_picpath" /bin/sh -c "/opt/apache-storm-1.0.1/bin/storm $mode" } pullp_w_picpath(){ docker pull $p_w_picpath if [ $? -ne 0 ];then echo "Docker pull $p_w_picpath fail." exit 1 fi } case $5 in deploy) pullp_w_picpath run ;; redeploy) pullp_w_picpath docker stop $name docker rm $name run ;; *) echo "Usage: $0 [appname version container_name mode deploy|redeploy]" esac
1.修改storm.yaml文件,配置zookeeper节点信息(storm.zookeeper.servers+storm.zookeeper.port),如:
storm.zookeeper.servers: - "192.168.1.1" storm.zookeeper.port: 22181 storm.local.dir: "/opt" nimbus.seeds: ["ub"] supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
2.添加执行权限 chmod +x storm.sh
3.传参执行 storm.sh
eg: ./storm.sh storm v20160712 ui ui deploy ./storm.sh storm v20160712 nimbus nimbus deploy ./storm.sh storm v20160712 supervisor supervisor deploy
访问storm UI界面
eg:http://192.168.1.1:8080