MySQL应用架构优化-实时数据处理(2)

22.4.7. 初始化Storm

这边我们在(10.10.10.21 storm_1、10.10.10.22 storm_2、10.10.10.23 storm_3)这三台部署storm。

  • 到官网下载Stormtorm(apache-storm-0.9.6.zip)
  • 解压到/usr/local/目录下,三台机子都执行同样的命令

  • 设置yaml配置文件

  • 创建Storm运行时目录

  • 启动Storm

  • 开启web界面访问Storm UI

mysql

看到上的界面就说明我们的Storm已经部署完毕了。

22.4.1. 构建streamparse(Python Storm框架)

streamparse 是Python Storm的一个框架,他可以将python代码打包为一个jar包运行在Storm中。

官网:http://streamparse.readthedocs.io/en/master/quickstart.html

(PS:streamparse 3 以上的拓扑已经改变。和作者沟通过他是为了让streamparse能够更好的独立运行,从而脱离storm环境。

  • 创建3机信任,分别在3台机子上都生成ssh的公钥,分别执行以下命令

执行完上面命令后会在各个主机的 ~/.ssh/ 目录下会生成 id_rsa.pub 文件。将3台机子中的公钥都拷贝到一个文件中并且让3台机子的这个文件内容都一样

  • 在3台机子上创建config文件(3台机子都要执行)

  • 下载 lein 文件到 /usr/local/bin 目录中,授予可执行权限(3台机子都要执行)

  • 安装streamparse(3台机子都要执行)

  • 创建storm_project 目录,并且开始一个简单的Storm项目(在storm_2上操作),这边不要再Storm启动的Nimbus节点上创建,因为到时候运行Storm项目会有端口上的冲突。

  • 设置json配置文件(在storm_2上操作)

  • 创建相关目录(3个机器上都需要执行)

  • 将wordcount程序提交到Storm集群上(在storm_2上操作)

如果输出类似上面的信息就算是部署完成了。

  • 确认wordcount程序已经部署到了 Storm中

mysql

  • 停止Storm中的wordcount程序

出现上面信息就说明wordcount程序已经从Storm集群中停止并移除了。

mysql

22.4.9. streamparse代码编写

由于这是示例程序,我们就在之前创建好的wordcount项目中修改代码。在这里我们只需要修改spout和bolt的代码就好。

这边我们需要安装Python Kafka和Python MongoDB的相关模块,执行如下命令:

  • words.py代码(spout)

words.py的功能就是不断消费kafka产生的消息,并且发送(emit)下面一个接收者(spout|bolt)。

  • py代码

wordcount.py主要是实现了,接收从words.py发送的信息(json字符串),并将接收的到信息解析成转化成python的字典类型,分析数据存放到MongoDB(10.10.10.12)中。

编写好上面代码之后就需要测试运行情况了。

  • 运行streamparse进行测试

由于我们还不知道我们写的代码正确性,因此需要使用sparse run来记性调试,而非使用sparse submit直接提交到Storm环境中。

  • 向Logstash(10.10.11)监听的文件中输入相关的订单信息

  • 查看MongoDB(10.10.12)中的订单统计信息

  • 最后只要将我们的项目提交到Storm上面去就好了

到这里我们就使用Python完成了Storm环境的搭建和开发。

22.4. 总结

其实许多的系统中都不纯属于的OLTP或者OLAP,基本上是他们两个的结合体。当OLTP中掺杂OLAP的时候有时候如果单靠数据库查询来解决问题,这样就会造成OLTP系统变的慢(因为查询变大而复杂)。因此,遇到这类的情况就需要在架构层面上去解决了。现在,Storm和Spark都是用于实时计算。因此,有碰到类似以上场景的朋友,可以考虑给系统换上“新装”了。

 

昵称: HH
QQ: 275258836
ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)

感觉本文内容不错,读后有收获?

逛逛衣服店,鼓励作者写出更好文章。

HH

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: