您的位置:首页 > 编程语言 > C语言/C++

在Strom中使用C++开发Bolt总结

2013-11-19 18:10 204 查看
原创文章,欢迎转载!

请注明原文地址:/article/1944248.html

参考1:

storm下运行C++程序(一)

/article/1944239.html

参考2:

Storm下运行C++(二)

/article/1944249.html

1.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++程序(一)

/article/1944239.html

作者分享了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++(二)

/article/1944249.html

一个老外写的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问题的解决方法/article/1944390.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: