• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > Strom实时计算--简述,strom实时--

Strom实时计算--简述,strom实时--

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含storm实时计算,storm实时数据处理,storm 实时,storm 日志实时,storm流式计算等服务器相关知识,网友希望可以进行参考

Strom实时计算--简述,strom实时--



Strom和hadoop的区别:

  全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上 得到了广泛的使用。但是,hadoop不擅长实时计算。这时需要strom实时计算系统

Strom架构

Storm集群由一个主节点和多个工作节点组成。主节点运行了一个名为“Nimbus”的守护进程,用于分配代码、布置任务及故障检测。每个工作节点都运行了一个名为“Supervisor”的守护进程,用于监听工作,开始并终止工作进程。Nimbus和Supervisor都能快速失败,而且是无状态的,这样一来它们就变得十分健壮,两者的协调工作是由Zookeeper来完成的。ZooKeeper用于管理集群中的不同组件,ZeroMQ是内部消息系统,JZMQ是ZeroMQMQ的Java Binding。有个名为storm-deploy的子项目,可以在AWS上一键部署Storm集群. 

 

Storm基本概念

Nimbus:负责资源分配和任务调度。

Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。

Worker:运行具体处理组件逻辑的进程。

Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,spout/bolt的线程称为executor。 一个线程可以承载两个task(即为对象)

Topology:storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。

Spout:在一个topology中产生源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源 数据。Spout是一个主动的角色,其接

口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。Strom数据的入口与

Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被 动的角色,其接口中有个execute(Tupleinput)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。Strom具体的业务逻辑处理

Tuple:一次消息传递的基本单元。本来应该是一个keyvalue的map,但是由于各个组件间传递的tuple的字段名称已经事先定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list. spout与各个Bolt之间数据的传输格式

Stream:源源不断传递的tuple就组成了stream。

 

 

StromApi

常用类

BaseRichSpout  (消息生产者) 可从外部文件飞关系数据读取数据

BaseBasicBolt  (消息处理者)  处理数据

TopologyBuilder  (拓扑的构建器)

Values (将数据存放到values ,发送到下个组件)

Tuple(发送的数据被封装到Tuple,可以通tuple接收上个组件发送的消息)

Config  (配置)

StormSubmitter / LocalCluster  (拓扑提交器)

各组件运行关系以及运行过程

在storm里面worker是具体执行工作的进程,Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程,这个工作进程就是worker。即为具体干活的。

Task为一个bolt或者spout,任务。

整个过程:

  nimbus分配任务后,会把任务写到zk里面,Supervisor(工作节点)到zk中领任务,然后会启动一定数量的worker,在work中会有一定数量的task(bolt或者是spout对象,在work中可以设置多个task即多个spout或者多个bolt来做同样的工作,提高工作效率),来处理相应的业务逻辑。

 

示例代码:

TopologyBuilder builder = new TopologyBuilder();

//定义spout并且制定出业务处理方法RandomWordSpout,和该spout的id

//2表示该support的并发数,不加.setNumTask线程数和task的数量是一样的即为多少

线程就有多少个对象

builder.setSpout("random", new RandomWordSpout(), 2); 

//定义一个bolt,对spout接受到的数据做第一步处理,制定其id和业务实现以及并发数,并制定该bolt数据输入口的消息分发策略是按照随机分发。

//4表示启用4个线程来执行这个bolt,每个线程执行的东西一样,即开4个线程来承载bolt对象从spout里面读取数据

//8表示实例化出8个bolt对象来读取spout传送过来的数据,这样就是一个线程处理2个bolt对象,即一个线程执行一个对象一会,然后在执行另一个一会

builder.setBolt("transfer", new TransferBolt(),4).shuffleGrouping("random").setNumTasks(8);

//4表示开启4个线程来读取上一个bolt的数据,没有配置setNumTask默认一个线程承载一个对象,new Fields("word")表示读取上一个bolt的value字段

builder.setBolt("writer", new WriterBolt(), 4).fieldsGrouping("transfer", new Fields("word")).setNumTasks(8);

Config conf = new Config();

//设置处理这个任务的worker数量。

conf.setNumWorkers(4);

//acker消息跟踪,也为一个task,0表示不启用,1表示启用

conf.setNumAckers(0);

conf.setDebug(false);

StormSubmitter.submitTopology("comp-test-1", conf, builder.createTopology());


在storm中存在多个对象的原理是有new出来一个对象序列化到硬盘中,假设后面是setnumTask(8)的话反序列化出8个对象。

消息分发策略

有7中消息分发,即为各个组件传递消息的规则策略,常用以下3中

Shuffle Grouping:随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同。

Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts,而不同的userid则会被分配到不同的Bolts。一个bolts可能会有多种<

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Storm计算结果是如何存放的,Storm计算结果存放
  • Strom实时计算--简述,strom实时--

相关文章

  • Spark中广播变量知识点
  • 整理得很全面的Nginx学习资源,nginx学习资源
  • 从Hadoop URL中读取数据,hadoopurl读取数据
  • Flocker浅析与Docker插件(3),flockerdocker
  • Openfire Hazelcast集群详解,openfirehazelcast
  • 2015年中国的云计算标准有哪些?,2015年中国标准
  • CMDBuild安装及webservice接口的获取,cmdbuildwebservice
  • [Hive]Hive分区表新增字段,hive分区表新增字段
  • Spark学习笔记之浅释,spark学习笔记
  • Cloud Foundry安装部署指南(下),cloudfoundry

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • hadoop学习笔记(三)——WIN7+eclipse+hadoop2.5.2部署,hadoopwin7
    • libvirt网络过滤规则:禁止客户机(bridge方式)连接外网,libvirtbridge
    • Hive之简单查询不启用MapReduce,hive启用mapreduce
    • (Kilo)Devstack Kilo版本localrc推荐,devstacklocalrc
    • 玩转OpenStack网络Neutron(3)--配置多种不同类型网络,openstackneutron
    • 实战第一个云程序,实战第一个云
    • S3C2416 按键驱动,s3c2416按键驱动
    • 1006-hive的自定义UDF函数,1006-hiveudf函数
    • spark core源码分析7 Executor的运行,sparkexecutor
    • Spark性能优化指南:高级篇

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有