一、storm基础概念
来源:互联网 发布:个人域名申请 编辑:程序博客网 时间:2024/05/16 14:38
1.1什么是storm
storm是分布式实时计算框架。类似Hadoop MapReduce, 用户按照规定的编程规范实现一个任务,然后将这个任务递交给Storm框架,Storm将这个任务跑起来,并且按7 * 24小时运行起来。只计算,不存储。
开发语言:Clojure
原语:
Google的MapReduce:为我们提供了map,reduce原语;
Twitter的Storm:为实时计算提供了一些简单优美的spout,bolt原语,高级原语有面向事务的trident原语。
框架通信机制:0.8之前是zeroMQ(缺点无法限制其内存), 0.9后是netty(但仍兼容ZMQ)
1.2实时数据处理框架
1.3 storm编程模型
第一步:继承BaseRichSpout;
第二步:继承BaseBasicBolt;
第三步:组装拓扑
Spout组件继承BaseRichSpout:
publicclassRandomSpout extendsBaseRichSpout{
//获取消息并发送给下一个组件的方法,会被storm不断地调用
publicvoidnextTuple()
{ collector.emit(newValues(..)); //封装到tuple中发送给下一个组件}
publicvoidopen(Map conf, TopologyContext context, SpoutOutputCollector collector)
{this.collector=collector; }//进行初始化,只在开始时调用一次
//定义tuple的schema
publicvoiddeclareOutputFields(OutputFieldsDeclarer declarer)
{declarer.declare(newFields("src_word"));}
}
Bolt组件继承BaseBasicBolt:
public class UpperBolt extends BaseBasicBolt {
//每来一个消息元组tuple,都会被执行一次该方法
public void execute(Tuple tuple,BasicOutputCollector collector)
{
String word=tuple.getString(0);//获取下标第一个消息
…
collector.emit(new Values(upper)); //发送出去
}
public void declareOutputFields(OutputFieldsDeclarer declare)
{ declare.declare(new Fields("upper"));}//给消息申明一个字段名
}
Main函数:
// 描述topology的结构,以及创建topology并提交给集群
public class TopoMain {
public static void main(String[] args) throws..{
TopologyBuilder builder = new TopologyBuilder();
//设置消息源组件 4表示spout进程个数,并行度=4
builder.setSpout("randomSpout", new RandomSpout(),4);
//设置逻辑处理组件
//shuffleGrouping 是分组策略,指定接收哪个组件传过来的消息
builder.setBolt("upper", new UpperBolt(),4).shuffleGrouping("randomSpout");
builder.setBolt("result", new SuffixBolt(),4).shuffleGrouping("upper");
//创建一个topology
StormTopology topology=builder.createTopology();
Config config=new Config();
config.setNumWorkers(4);//设置进程个数
config.setDebug(true); //设置调试状态
config.setNumAckers(0); //消息应答器,事务性不是很强,可设置为0
//提交topology到storm 定义一个名称,好在集群里去标识;
//通过配置对象传递参数给集群,集群根据这些参数,任务调度进行调整
StormSubmitter.submitTopology("demotopo", config, topology);
}
}
1.4 storm与spark streaming比较
spark streaming
storm
数据处理方式
基于数据的批处理方式,移动计算而非移动数据
利用时间批量窗口生成源RDDà生成jobà调度到spark框架执行
移动数据而非移动计算
在处理架构上数据流入到计算节点
生态体系
基于spark,可与其他spark组件结合
缺乏与现有的hadoop生态体系的融合
延迟
较高,>2s
低,<100ms
吞吐量
较高,批处理
低,流式处理
容错
通过lineage以及在内存维护两份数据进行备份,开销较小
通过ack组件跟踪,开销较大
事务性
保证数据在批处理层次只被处理一次,事务性较强
ack保证消息不丢失,但可能会重复。若想消息恰好一次需要用户自己实现
- 一、storm基础概念
- 一、storm基础概念
- storm基础一
- Storm 概念
- storm、jstorm 调研系列(一)----jstorm介绍以及与spark的比较,外加一些基础概念
- C# 基础概念【一】
- TestNG 一 基础概念
- [Box2D]一.基础概念
- android 基础概念 一
- SLAM(一)基础概念
- 密码学基础概念(一)
- Kotlin基础概念(一)
- springboot(一)基础概念
- 《Getting Started with Storm》章节一 基础
- Storm-kafka-hbase基础编程一
- Storm概念、原理详解及其应用(一)BaseStorm
- Storm概念、原理详解及其应用(一)BaseStorm
- Storm概念、原理详解及其应用(一)BaseStorm
- Hdu 1231 最大连续子序列
- Android 根据Uri删除文件
- 使用ViewPager实现顶部tabbar切换界面
- 中电投-镇宁3号集合资产管理计划
- Android之bitmap的使用
- 一、storm基础概念
- 节点操作
- HDU 2426 Interesting Housing Problem(EK模板)
- Bootstrap学习笔记——Bootstrap的基本介绍
- webmagic 爬取示例,新手学习
- 前端面试准备(1)
- Java实现邮件发送(带附件)
- 欢迎使用CSDN-markdown编辑器
- 轻装上阵Html5游戏开发,JEESJS(二)