使用其他语言编写Bolt

Bolt可以使用任意语言编写。用另外一种语言编写Bolt来作为子进程运行。Storm会在标准输入输出的基础上使用Json来与子进程通信。通信协议之需要一个100行的适配器库,Storm自带了Ruby,Python,和Fancy的适配器库。

下面是WordCountTopology中SplitSentence的定义:

1
2
3
4
5
6
7
8
9
public static class SplitSentence extends ShellBolt implements IRichBolt {
    public SplitSentence() {
        super("python""splitsentence.py");
    }
 
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("word"));
    }
}

SplitSentence集成了ShellBolt并且通过"splitsentence.py"参数来指定使用python来运行。下面是splitsentence.py的具体实现:

1
2
3
4
5
6
7
8
9
import storm
 
class SplitSentenceBolt(storm.BasicBolt):
    def process(self, tup):
        words = tup.values[0].split(" ")
        for word in words:
          storm.emit([word])
 
SplitSentenceBolt().run()

更多的关于使用其他语言写Spout和Bolt的信息,以及了解如何使用其他语言(完全避免使用JVM)创建Topology,查看Using non-JVM languages with Storm

 保证消息处理

前文中我们调过了一些关于元组如何发射的概念。这些概念是Storm 可靠性的 一部分:Storm是如何保证每个消息被完全难处理的。阅读Guaranteeing message processing一文来了解它是如何工作的,而且作为一个使用者应该如何利用Storm的可靠性。

事物Topology

Storm保证每个消息都会被Topology处理至少处理一次。一个常见的问题是 “如何熟练使用Storm进行计数?会不会重复计数?”Storm有一个叫事物Topology的特性让你在大多数计算中精确处理消息。点击这里获取更多的关于事物Topology的信息。

 分布式RPC

本文档介绍了如何熟练使用Storm做基本的流处理。你还可以使用Storm做更多的事情。Storm中一个比较有意思的程序是分布式RPC,你可以使用它来进行并行计算。点击这里获取更多的关于分布式RPC的信息。

总结

本手册提供了开发、测试和不是Storm Topology的概览,其他的文档将更深入的了解Storm使用的各个方面

译者语

经过多半天的努力,终于完成了文档的翻译,后续会继续带来更多的技术翻译,如Zookeeper,Spark,Kafa等。文中若有翻译不妥之处,望指正,大家共同进步

Storm官方帮助手册翻译(下)的更多相关文章

  1. Storm官方帮助手册翻译(上)

    Storm作为当前最流行的实时计算框架,自Twitter将其开源后就一直备受关注.由于其具有先天的稳定性以及便捷性,目前被许多大公司所采用,国外像雅虎.雅虎日本.Twitter.OOYALA.Spot ...

  2. Caffe2官方使用手册翻译

    详细教程见点击这里 http://www.jianshu.com/c/cf07b31bb5f2

  3. MariaDB官方手册翻译

    MariaDB官方手册 翻译:create database语句(已提交到MariaDB官方手册) 翻译:rename table语句(已提交到MariaDB官方手册) 翻译:alter table语 ...

  4. Hive官方使用手册——新Hive CLI(Beeline CLI)

    Hive官方使用手册——新Hive CLI(Beeline CLI) https://blog.csdn.net/maizi1045/article/details/79481686

  5. Java垃圾回收手册翻译 - 什么是垃圾回收

    Java垃圾回收手册翻译 - 什么是垃圾回收 初看之下,垃圾回收应该要做其名称之事 - 找到和丢掉垃圾.然而事实上它正好做着相反的事,垃圾回收会记录所有仍在使用中的对象,然后将其他标记为垃圾.谨记这点 ...

  6. Hive官方手册翻译(Getting Started)

    翻译Hive官方文档系列,文中括号中包含 注: 字样的,为我自行标注的,水平有限,翻译不是完美无缺的.如有疑问,请参照Hive官方文档对照查看.   内容列表 Cloudera制作的Hive介绍视频 ...

  7. Hive官方手册翻译(Getting Started)(转)

    原文:http://slaytanic.blog.51cto.com/2057708/939950 翻译Hive官方文档系列,文中括号中包含 注: 字样的,为我自行标注的,水平有限,翻译不是完美无缺的 ...

  8. Hive 官方手册翻译 -- Hive Transactions (Hive 事务)

    由 Alan Gates创建, 最终由 Andrew Sherman修改于2018年8月7日 原文链接:https://cwiki.apache.org/confluence/display/Hive ...

  9. Hive 官方手册翻译 -- Hive DDL(数据定义语言)

    Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...

随机推荐

  1. iOS7之后的文本高度封装

    #import "NSString+Util.h" @implementation NSString (Util) +(CGFloat)changeStationWidth:(NS ...

  2. C#调用托管C++类(DLL)

    毕设是做一个网络摄像头的相关应用.界面用WPF,图像处理部分是OpenCV.没用EmguCV的原因是国内EmguCV的资料相对比较少,EmguCV虽然提供了Winform的控件,在做UI上有一定优势, ...

  3. python自动化Traceback (most recent call last):报错

    今天使用python.然而遇见了Traceback (most recent call last):的报错.抓狂的一笔.有说path写错的,有说是...网上查到的资料也是很少.后来突然发现,页面上我暂 ...

  4. C++中Map常见用法以及按照value排序

    今天做一个简单的算法题,居然用了1个小时,STL unordered_map用多了,没想到map这次派上了用场,这里记录一下: 算法题为 给一个字符串例如  abaaba,每连续两个字符组成一个子串 ...

  5. File对象的常用方法

    File对象不仅可以表示文件,还可以表示目录,源码注释是这么说的:An abstract representation of file and directory pathnames. File类最常 ...

  6. NS_ASSUME_NONNULL_BEGIN 延伸

    NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END 在.h文件中,可以看到这两个宏,翻看定义,这两个宏的代码是 #define NS_ASSUME_NONNUL ...

  7. Dev 甘特图

    date1.EditValue = DateTime.Now.Date.AddDays().AddHours().AddMinutes().AddSeconds(); scLd1.PopupMenuS ...

  8. webuploader问题

    pick里面的id,我理解就是有点选择器的意思,目前我的认知是不设置它就无法取文件操作: 然后,查看页面的时候发现,pick通过id选定的元素,被替换成了webuploader自定义的元素,表现是-- ...

  9. Qt 5.7 > Qt Applications

    本文翻译自Qt官方文档: http://doc.qt.io/qt-5/qmlapplications.html QML 应用 QML是声明式语言,它使得用户界面以及交互行为可以被"描述&qu ...

  10. bigdecimal使用

    float和double类型 一般用于科学计算,用于金融的都用bigdecimal类型.在项目中浮点型数据没有指定 默认是double类型.bigdecimal的构造参数有浮点型和String类型.但 ...