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

原创文章,欢迎转载!

请注明原文地址: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/16828305


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

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?

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

       其实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


你可能感兴趣的:(C++,storm,drpc)