在Strom中使用C++开发Bolt总结
来源:互联网 发布:考研作息时间表知乎 编辑:程序博客网 时间:2024/06/05 16:51
原创文章,欢迎转载!
请注明原文地址:http://blog.csdn.net/jmppok/article/details/16827837
参考1:
storm下运行C++程序(一)
http://blog.csdn.net/jmppok/article/details/15501947参考2:
Storm下运行C++(二)
http://blog.csdn.net/jmppok/article/details/168283051.Storm简介
Storm是Twitter开源的一套并行处理系统,网站主页:https://github.com/nathanmarz/storm/wiki
其思想与Hadoop类似,但也与Hadoop有本质区别:Hadoop主要偏重批处理,Storm主要面向实时处理, 与Storm类似的系统还有Puma 、S4等。
2.为什么使用C++开发Storm Bolt
Storm的主要开发语言是Java,但由于其并行实时计算的特性,很多公司如Alee,baidu等都在使用。
但在实际使用过程中,经常会产生将现有的C++程序移植到Storm框架中的需求。
作者就有这样的需求。
3.现有C++开发Storm Bolt的资料及其问题和解决
从baidu、google等查找C++开发Storm向相关资料,基本没有,只有2篇:
(1). http://blog.csdn.net/yan_mount/article/details/11527799
storm下运行C++程序(一)
http://blog.csdn.net/jmppok/article/details/15501947作者分享了C++开发Storm的方法,但是代码太少了,也不完整,无法根据他的指导进行实际。不过值得一提的是里面有两点对我很有帮助:
a.super("/bin/sh","start.sh"); 在Java的壳中启动C++程序时,需要用脚本中转一下。因为C++程序在部署时,会打包到jar中,Storm框架解析出来后放置work的临时目录中;在该过程中C++程序会丢失可执行权限。所以需要用脚本启动。(C++程序和start.sh都放置java工程的resources目录下)
爱思考的小伙伴可能会想:那start.sh也会丢失可执行权限阿?
没错,所以我们启动的是/bin/sh ,然后将start.sh文件作为参数传给sh,这样就可以执行了。
start.sh内容如下:
chmod a+x c_app
./c_app
b.文章最后提出了问题:“
bolt程序会接收到非json格式的输入:
Shell msg: read_msg:[3][3][3][3][3][3]
造成程序僵死...” 本钓丝也遇到同样的问题,不过和他出现的情况不同(按照他的步骤开发的Bolt可以执行,在使用C++ Bolt + DRPC时 才出现相同的问题)
(2).http://demeter.inf.ed.ac.uk/cross/stormcpp.html
Storm下运行C++(二)
http://blog.csdn.net/jmppok/article/details/16828305一个老外写的C++ Wrapper,封装了Storm.h和Storm.cpp,(需要使用Jsoncpp库),里面封装了BasicBolt和BasicSpout,只需要继承就可以了,
高手...
他的教程写的比较详细,但是细节上有些问题,比如:
a. what's it?
其实split_sentence就是你编译的C++程序。
b.按他的教程是没办法运行的,会出现前面说的没有权限的问题,按上面说的进行操作就OK了。
c.最重要原理他没说:就是要继承Storm.h实现一个Spout或Bolt,并写一个主程序,将Spout或Bolt run起来。
然后再Java的壳中调用该可执行程序(参考资料1)。
4. 后续问题:使用DRPC验证
综合以上两个资料就可以用C++开发Storm的插件了,在本地运行OK。
但是接下来可能就需要验证,或者说我怎么能访问这个实时处理服务呢?
这就是DRPC,还记不记得上面作者所的使用DRPC+ C++Bolt遇到了问题?
可参照:Storm DRPC 使用及访问C++ Bolt问题的解决方法http://blog.csdn.net/jmppok/article/details/16840231
- 在Strom中使用C++开发Bolt总结
- strom实战--在Bolt中传递对象
- 在Storm中使用C++开发Bolt总结
- strom中worker、task、spout/bolt、executor、component的关系
- strom中worker、task、spout/bolt、executor、component的关系
- strom中worker、task、spout/bolt、executor、component的关系
- (大数据之storm)strom中worker、task、spout/bolt、executor、component的关系
- 超链接在web开发中使用总结
- 搭建strom开发环境
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- Strom Topology执行分析:worker数,Bolt实例数,executor数,task数
- storm中bolt接收数据
- 在C++的环境中使用C开发
- 在 Ubuntu 中使用 GNUstep 搭建 Objective-C 开发环境
- 在 Ubuntu 中使用 GNUstep 搭建 Objective-C 开发环境
- Objective-c开发教程--如何在项目中使用AFNetworking
- strom
- Linux 安装mysql
- mvc前后台传值
- 【转】self.myOutlet=nil、viewDidUnload、dealloc的本质剖析
- “云计算将给中国带来1千万工作岗位”,我们准备好了吗?
- c/c++内存区域
- 在Strom中使用C++开发Bolt总结
- Python 学习入门(8)—— 格式化输出
- Python脚本总结--01
- 实参时丢弃了类型 discards qualifiers discards qualifiers问题
- java 基础知识普及
- jstl 怎么读取request中的对象
- js字符串转换成数字,数字转换成字符串
- Hibernate初出茅庐(一)
- 搜索引擎学习资源收集