美文网首页
Storm official website cn

Storm official website cn

作者: ZozoSpider | 来源:发表于2018-09-19 11:51 被阅读0次

    Storm_cn

    文档

    官网
    github
    github-2
    维基百科
    中文
    中文-2


    概念

    为什么要用storm? more

    • Storm是一个免费,开源的分布式实时计算系统。
    • Storm有很多使用场景:实时分析,在线机器学习,持续计算,分布式RPC,ETL工具等。
    • Storm很快:基准测试计时显示,每个节点每秒处理超过一百万个tuple数据。
    • 它是高可用的,高容错的,保证你的数据得到处理,并且很容易设置和操作。

    Topologies more

    • 实时应用的逻辑被封装成topology。
    • 一个topology和一个MapReduce job类似。唯一的不同点就是一个MapReduce job最终会结束,然而一个topology会永远运行(当然,直到你kill了它)。
    • 一个topology是一个通过stream groupings连接的spouts和bolts的图表。

    Topologies -> TopologyBuilder more

    TopologyBuilder公开了Java API,用于具体描述一个topology,用于Storm执行。Topologies最终是Thrift结构,但是基于Thrift API如此冗长,TopologyBuilder极大的简化了创建topologies的过程。创建和提交一个topology的模版如下:

    TopologyBuilder builder = new TopologyBuilder();
    
    builder.setSpout("1", new TestWordSpout(true), 5);
    builder.setSpout("2", new TestWordSpout(true), 3);
    builder.setBolt("3", new TestWordCounter(), 3)
             .fieldsGrouping("1", new Fields("word"))
             .fieldsGrouping("2", new Fields("word"));
    builder.setBolt("4", new TestGlobalCount())
             .globalGrouping("1");
    
    Map conf = new HashMap();
    conf.put(Config.TOPOLOGY_WORKERS, 4);
    
    StormSubmitter.submitTopology("mytopology", conf, builder.createTopology());
    

    用本地模式运行相同的topology,将它配置为记录所有发出的tuples,如下。注意让topology运行10秒钟再关闭。

    TopologyBuilder builder = new TopologyBuilder();
    
    builder.setSpout("1", new TestWordSpout(true), 5);
    builder.setSpout("2", new TestWordSpout(true), 3);
    builder.setBolt("3", new TestWordCounter(), 3)
             .fieldsGrouping("1", new Fields("word"))
             .fieldsGrouping("2", new Fields("word"));
    builder.setBolt("4", new TestGlobalCount())
             .globalGrouping("1");
    
    Map conf = new HashMap();
    conf.put(Config.TOPOLOGY_WORKERS, 4);
    conf.put(Config.TOPOLOGY_DEBUG, true);
    
    LocalCluster cluster = new LocalCluster();
    cluster.submitTopology("mytopology", conf, builder.createTopology());
    Utils.sleep(10000);
    cluster.shutdown();
    

    Streams more

    • Stream是Storm的一个核心抽象概念。一个Stream是一系列无界的tuples序列,它用一种分布式的并行的方式处理或创建的。
    • Streams定义了一个模式,该模式命名了tuples的字段,tuples包含intergers,longs,shorts,bytes,strings,doubles,floats,booleans和byte数组。你也可以定义你自己的序列化,以便自定义类似用于tuples的本地。
    • 每个流被声明的时候都被赋予一个id。鉴于单个spouts和bolts的流如此常见,OutputFieldsDeclarer有一个简单的方法用于声明单个stream,而不需要特别指定id。在这种情况下,stream的默认id为"default".

    Streams -> Tuple more

    • tuple是Storm的主要数据结构。一个tuple是一个被命名的值的列表,每个值可以是任何类型。tuples是动态类型的 - 字段的类型不需要指定。typles有一些有用的方法比如getInteger,getString,用于获取字段的值,而无需转换结果。
    • Storm需要指导如何序列化一个tuple里的所有值。默认情况下,Storm指导如何序列化原始的类型,string,byte数组。如果你想要使用其他类型,你需要为那个类型实现并注册一个序列化。

    Streams -> Serialization more

    Spouts more

    • 一个spout是在topology里的streams的一个源。通常spouts会从外部源读取tuples然后将它们发射到topology里(例如,Kestrel队列或者Twitter API)。
    • Spouts可以是可靠的或者不可靠的。如果tuple被Storm处理失败,一个可靠的spout能够响应,然后不可靠的spout会在它发射之后忽略它。
    • Spouts可以发射超过一个stream。为了实现这个,使用OutputFieldsDeclarer的declareStream方法声明多个streams,然后在使用SpoutOutputCollector的emit方法时,特别指定要发射的stream。
    • spouts的主要方法是nextTuple。nextTuple可以发射一个新tuple到topology,或者在没有新tuple发射的时候简单返回。有一点很重要,nextTuple方法在任何spout的实现中都不要阻塞,因为Storm在同一个线程上调用所有的spout方法。
    • spouts的另一个主要方法是ack和fail。当Storm检测到一个从spout发射的tuple被topology成功处理或者处理失败的时候,它们会被调用。ack和fail只会被可靠的spouts调用。

    Spouts -> ISpout more

    Spouts -> IRichSpout more

    Spouts -> Guaranteeing Message Processing more

    Bolts more

    • topologies的所有处理都在bolts中完成。bolts可以任何事,如过滤,处理,聚合,joins,和数据库交互等等。
    • Bolts可以做简单的stream转换。做复杂的stream转换通常需要很多步骤和很多bolts。例如,将一条推特转换为趋势图像至少需要两步:一个bolt用于滚动计数,一个或多个bolts用于退出顶部X图像(你可以通过用三个bolts来实现一个更稳定的stream转换)。
    • Bolts可以发射超过一个stream。为了实现这个,为了实现这个,使用OutputFieldsDeclarer的declareStream方法声明多个streams,然后在使用SpoutOutputCollector的emit方法时,特别指定要发射的stream.

    Understanding the Parallelism of a Storm Topology

    相关文章

      网友评论

          本文标题:Storm official website cn

          本文链接:https://www.haomeiwen.com/subject/fmtinftx.html