【预研】Storm C++ Wrapper demo的单机版本实现

来源:互联网 发布:网络教育心理学 编辑:程序博客网 时间:2024/06/05 15:57

基础知识思考整理
http://blog.csdn.net/aganlengzi/article/details/53302256

主要是参照[1][2][3]实现一个C++写的WordCountTopology的demo并成功运行,记录一下,源码和具体的实现参照https://github.com/Aganlengzi/stormcpp-demo。
系统和其中各软件的版本信息如下:

Ubuntu12.04 64bitApache-storm-1.0.2Apache-maven-3.0.5Python2.7.6Java1.7.0_79Zookeeper-3.3.5Jsoncpp-src-0.6.0-rc2 

其中,这个jsoncpp需要是严格这个版本,我使用最新版本的结果出现错误,换了另一个c++的json解释器也出错,最后才发现原因是在这个版本的问题。

在storm安装完成之后就一直想使用最熟悉的C++来开发相应的例子,但是参照了网上较少的两处资源(CSDN[1]和国外的一个前辈[2])后还是没能够成功,现在想来这和软件版本应该是有着莫大的关系。

在前一篇实践中,我介绍了整个环境的搭建过程和运行自带的wordCountTopology的例子,这篇实现的c++的demo实际上是和这个自带例子的功能和原理是一致的,只是将其中的spout、bolt都换成了c++实现(参照[3])而不是split功能仅仅用python实现。

主要参照的是jsoncpp的安装[4]和源码例子demo[3],但是将整个源码工程重新组织了一下,主要是适应我个人的习惯。另外,我的整个工程是在storm-starter中进行的,所以相当于是在storm-starter中添加了另外一个可以执行的类WordCountTopologyCpp。WordCountTopologyCpp.Java参照[3],放在/path/to/storm-starter/src/jvm/org/apache/storm/starter/,这个c++工程放在了/path/to/storm-starter/multilang/resources中,实际就是需要编译结果和shell文件,方便起见放在了这里,整个结构如下图:
这里写图片描述

需要注意的问题在前面的博客中基本上都有说到,在这里结合我自己遇到的总结一下:
1)jsoncpp版本选择Jsoncpp-src-0.6.0-rc2,建议编译成静态库或者动态库也可以放在开发工程的本地使用,而不是放在系统全局使用这个库。通过CMake可以非常容易做到一个C++工程的组织和编译。出现的问题类似于关键字:

Json::Value::value***或者Operator=***

还可能存在的一个问题是,在使用maven打包的jar中执行的时候找不到.so动态链接库,如果是自己的库的话建议使用静态链接的方式进行编译(只使用.a文件),这样的好处是不会出现库文件找不到的情况另外替换也比较方便。

2)仿照storm-starter中自带的WordCountTopology例子,使用Java作为一个程序的壳。相当于每一个独立的程序是整个流水线上的一个功能工人。只不过这个工人是用C++实现的。

3)使用shell脚本来调用可执行文件,也就是编译好的spout,bolt等,这样时机上还有个好处是在Java程序的壳确定好之后,可以专注开发c++程序和其中的功能。

#/bin/bashchmod a+x count./count

4)使用sudo提升当前用户的权限可能能够解决cannot execute *等问题。

5)其它问题我没怎么遇到,如有其它问题可以参照[1][3]
Demo中,Storm.h中实现了基本类型Spout、Bolt和BasicBolt类还有一些工具函数,SplitSentence.h(实际上在这个demo中感觉叫做WordCount.h比较好)基于上述基本类型实现了WordCount的spout和bolt类。然后后面的三个文件中只要声明对象并且调用其中的run成员函数就好了,就是让工人动起来。

值得注意一点的是,在运行过程中的log信息很多,我刚开始接触并不是十分理解其中的每个的含义,这在后面需要研究一下。但是[2]中实现的基本源码中是有中间结果和最后结果的文件存储的,所以可以查看。例如,在SplitSentence.h中,count Bolt的实现中可见最终结果保存到对应文件中的:
这里写图片描述
结果文件路径下:
这里写图片描述
这个路径要保证两点,首先是到目录的最后一级是存在的;另外就是对这个路径是有写权限的。否则程序在执行的过程中仍然可能挂掉。
参考
[1] http://blog.csdn.net/jmppok/article/details/16827837
[2] http://demeter.inf.ed.ac.uk/cross/stormcpp.html
[3] http://blog.csdn.net/lybingo/article/details/52873673
[4] http://blog.sina.com.cn/s/blog_752aac070101cnfr.html

0 0
原创粉丝点击