大数据(十五) - JStorm

article/2025/8/30 14:40:55
JStorm 是一个分布式实时计算引擎,是淘宝开源的
随着Storm 的规模越来越大,发现原有的很多Storm设计,只能适合小集群中运行,当集群规模超过100台时,均会出现一些或这或那的问题。JStorm 比Storm更稳定,更强大,更快, Storm上跑的程序,一行代码不变可以运行在JStorm上。
storm/Jstorm的安装、配置、启动几乎一模一样
从应用的角度,JStorm应用是一种遵守某种编程规范的分布式应用。从系统角度, JStorm是一套 类似MapReduce的调度系统。 从数据的角度,JStorm是一套基于流水线的消息处理机制。
在Storm和JStorm出现以前,市面上出现很多实时计算引擎,但自Storm和JStorm出现后,基本上可以说 一统江湖

源码
https://github.com/alibaba/jstorm
文档
https://github.com/alibaba/jstorm/wiki/JStorm-Chinese-Documentation


Jstorm/storm优点
开发非常迅速:接口简单,容易上手,只要遵守Topology、Spout和Bolt的编程规范即可开发出一个扩展性极好的应用,底层RPC、Worker之间冗余,数据分流之类的动作完全不用考虑
扩展性极好:当一级处理单元速度,直接配置一下并发数,即可线性扩展性能
健壮强:当Worker失效或机器出现故障时, 自动分配新的Worker替换失效Worker
数据准确性:可以采用 Ack机制,保证数据不丢失。 如果对精度有更多一步要求,采用 事务机制,保证数据准确。

应用场景
日志分析,从日志中分析出特定的数据,并将分析的结果存入外部存储器如数据库。目前,主流日志分析技术就使用JStorm或Storm 
管道系统, 将一个数据从一个系统传输到另外一个系统, 比如将数据库同步到Hadoop
消息转化器, 将接受到的消息按照某种格式进行转化,存储到另外一个系统如消息中间件
统计分析器, 从日志或消息中,提炼出 某个字段,然后做count或sum计算,最后将统计值存入外部存储器。中间处理过程可能更复杂。



资源slot
在JStorm中,资源类型分为4种, CPU, Memory,Disk, Port, 不再局限于Storm的port。 即一个supervisor可以提供多少个CPU slot,多少个Memory slot, 多少个Disk slot, 多少个Port slot
一个worker就消耗一个Port slot, 默认一个task会消耗一个CPU slot和一个Memory slot
当task执行任务较重时,可以申请更多的CPU slot,
当task需要更多内存时,可以申请更多的内存slot,
当task 磁盘读写较多时,可以申请磁盘slot,则该磁盘slot给该task独享。

Ack机制:通过Ack机制,很容易做到保证所有数据均被处理,一条都不漏。
当spout触发fail动作时,不会自动重发失败的tuple,需要spout自己重新获取数据,手动重新再发送一次

开发经验总结
https://github.com/alibaba/jstorm/wiki/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93
在架构上,推荐 “消息中间件 + jstorm + 外部存储” 3架马车式架构
JStorm从消息中间件中取出数据,计算出结果,存储到外部存储上
通常消息中间件推荐使用RocketMQ,Kafka
外部存储推荐使用HBase,Mysql
该架构,非常方便JStorm程序进行重启(如因为增加业务升级程序)

非事务环境中,尽量使用IBasicBolt
对于MetaQ 和 Kafka,
拉取的频率不要太小,低于100ms时,容易造成MetaQ/Kafka 空转次数偏多
一次获取数据Block大小推荐是2M或1M,太大内存GC压力比较大,太小效率比较低。
推荐一个worker运行2个task
使用zookeeper时, 建议使用curator,但不要使用过高的curator版本.Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架.

如果直接实现IRichBolt
emit(String streamId, Tuple anchor, List tuple) 后续component会向acker发送ack响应
emit(String streamId, List tuple)后续component不会向acker发送ack响应
IBasicBolt 都会自动使用第一个接口
IBatchBolt 都会自动使用第二个接口
推荐使用IBasicBolt

运维经验总结
https://github.com/alibaba/jstorm/wiki/%E8%BF%90%E7%BB%B4%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93

常见问题
https://github.com/alibaba/jstorm/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98


http://chatgpt.dhexx.cn/article/5ShEyXiS.shtml

相关文章

初识JavaScript---(1)

初识JavaScript———(1)!!! 一、初识JavaScript 1.什么是JavaScript? JavaScript是运行在浏览器上的脚本语言,简称JS。JavaScript程序不需要我们程序员手动编译,编写完源代码之后…

【JavaScript高级进阶】构造函数和原型,学会prototype

目录 前言 1.构造函数和原型 1.1使用prototype解决内存浪费的问题 1.2constructor构造函数构造器构造函数 2.原型链 2.1js中成员查找规则 2.2原型对象this指向 2.3扩展内置对象 3.call作用 4.继承 4.1利用原型对象继承 写在最后 前言 哈喽哈喽大家好,因为…

Jstorm 基本概念

本质 基于消息的流水线处理模型是一套类似MapReduce一样的编程模型内核是一套调度系统 适合的业务 高并发的计算任务数据流之间相互无依赖 编程模型 Topology:即一个数据流的拓扑结构,包含多个Spout和BoltSpout:从外部获取数据&#xff…

JStorm和Storm比较

1、What——JStorm是什么?  概述: JStorm 是一个分布式实时计算引擎,类似Hadoop MapReduce的系统, 用户按照规定的编程规范实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这个任务跑起来&#xf…

JStorm Storm 上手demo

折线之间的内容整理自: http://blog.csdn.net/suifeng3051/article/details/38369689 -------------------------------------------------------------------------------------------------------------------------------------------- 在全面介绍Storm之前&…

PyTorch从零开始实现Transformer

文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码(可直接运行) 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…

jstorm storm 入门demo

jstorm和storm比较 jstorm 是阿里巴巴开源的基于storm采用Java重写的一套分布式实时流计算框架,使用简单,特点如下: 1,开发非常迅速: 接口简单,容易上手,只要遵守Topology,Spout,Bo…

JStorm介绍

一、简介 JStorm是一个分布式实时计算引擎。JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任务跑起来,并按7*24小时运行。如果中间一个worker发生了意外…

马氏距离实例详解

介绍 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的…

距离度量:闵氏、欧式、马氏、余弦、汉明等

目录 1. 闵氏距离(Minkowski Distance) 2. 欧式距离(Euclidean Distance) 3. 标准化欧式距离(Standardized Euclidean distance) 4. 马氏距离(Mahalanobis Distance) 5. 余弦距…

马氏距离(Mahalanobis Distance)推导及几何意义

看了一些博客对马氏距离的解释,似乎没有讲到本质的地方,本文从欧氏距离存在的问题开始入手,一步步推导出马氏距离,并得出结论:原始空间中的马氏距离等于坐标旋转变换及缩放后的空间中的欧氏距离。 假设数据集 X ∈ R N…

直观理解--马氏距离

首先我们很了解欧氏距离了,就是用来计算欧式空间(就是我们常见的坐标系)中两个点的距离的。 比如点 x ( x 1 , … , x n ) x (x_1,…,x_n) x(x1​,…,xn​) 和 y ( y 1 , … , y n ) y (y_1,…,y_n) y(y1​,…,yn​) 的欧氏距离为&…

Mahalanobis距离(马氏距离)的“哲学”解释

讲解教授:赵辉 (FROM : UESTC) 课程:《模式识别》 整理:PO主 基础知识: 假设空间中两点x,y,定义: 欧几里得距离, Mahalanobis距离, 不难发现,如果去掉…

六大距离:欧式距离、街道距离、马氏距离等

文章目录 1 简 介2 距离特征2.1 Euclidean距离2.2 Cosine距离2.3 manhattan距离2.4 chebyshev距离2.5 minkowski距离2.6 mahalanobis距离 3 代 码实现 1 简 介 数值向量是数据建模问题中最为常见的一类特征,例如: 在一些涉及图片,文本信息等…

马氏距离例题详解(全网最详细)

马氏距离例题详解 定义 马哈拉诺比斯距离是由印度统计学家马哈拉诺比斯 (英语)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带…

浅谈马氏距离【Mahalonobis Distance】

浅谈马氏距离【Mahalonobis Distance】 1. Introduction2. 欧式距离对于多元数据会存在一些什么问题?3 .什么是马氏距离4.马氏距离背后的数学和intuition5. 利用python来计算马氏距离6. Case1: 使用马氏距离进行多元异常值检测7. Case 2: 对分类问题应用马氏距离8. …

距离度量之马氏距离

马氏距离 用来度量一个样本点P与数据分布为D的集合的距离。 假设样本点为: 数据集分布的均值为: 协方差矩阵为S。 则这个样本点P与数据集合的马氏距离为: 马氏距离也可以衡量两个来自同一…

马氏距离(Mahalanobis Distance)介绍与实例

本文介绍马氏距离(Mahalanobis Distance),通过本文,你将了解到马氏距离的含义、马氏距离与欧式距离的比较以及一个通过马氏距离进行异常检测的例子(基于Python的sklearn包)。 目的 计算两个样本间的距离时…

马氏距离-Mahalanobis Distance

一、学习目的 在训练one-shoting learning 的神经网路的时候,由于采用的是欧式距离,欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实…

欧氏距离与马氏距离

Preface 之前在写《Multi-view CNNs for 3D Objects Recognition》的阅读笔记的时候,文章中的一个创新点便是将MVCNN网络提取到的3D Objects的形状特征描述符,投影到马氏距离(Mahalanobis Distance)上,“这样的话&…