【预研】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
- 【预研】Storm C++ Wrapper demo的单机版本实现
- 【预研】Storm Ubuntu 12.04 64 bit 的单机版本的安装和运行
- kafka+storm集成并运行demo-单机
- C++开发Storm demo实现
- Storm 单机环境的安装与配置
- Storm 单机环境的安装与配置
- Storm 单机版的安装流程
- Wrapper和xinetd的实现
- xen demo c版本
- storm 1.0版本滑动窗口的实现及原理
- spark单机版本的搭建
- TankWar 单机(JAVA版) 版本0.7~版本0.9 让坦克实现八个方向的移动
- 关于storm版本的问题
- storm安装 - 单机安装
- Storm 单机版安装
- storm 单机版安装
- Storm单机版安装
- Storm单机环境配置
- java.util.ConcurrentModificationException 异常
- Android Fragment
- Android 获取SHA1(发布版和调试版)
- Struts2的知识整理总结(一)
- web开发网页(一)
- 【预研】Storm C++ Wrapper demo的单机版本实现
- NYOJ860 又见01背包(01背包的另一种思路)
- 测试基础积累
- GCD dispatch_async 与dispatch_sync 的理解
- 自定义ViewGroup中onLayout()确定子View位置和大小
- Javascript Api
- redis字符串string类型的操作
- 项目部署之工具使用心得
- JSON.parse()和JSON.stringify()