storm

Storm高级原语(二) -- DRPC详解

*爱你&永不变心* 提交于 2019-11-30 07:27:38
Storm里面引入DRPC主要是 利用 storm 的实时计算能力来并行化CPU 密集型(CPU intensive )的计算任务 。DRPC的stormtopology以函数的参数流作为输入,而把这些函数调用的返回值作为topology的输出流。 DRPC其实不能算是storm本身的一个特性, 它是通过组合storm的原语stream、spout、bolt、 topology而成的一种模式(pattern)。本来应该把DRPC单独打成一个包的, 但是DRPC实在是太有用了,所以我们我们把它和storm捆绑在一起。 概览 Distributed RPC是由一个” DPRC 服务器 ”协调(storm自带了一个实现)。 DRPC 服务器协调:① 接收一个RPC 请求 ② 发送请求到storm topology ③ 从storm topology 接收结果 ④ 把结果发回给等待的客户端 。从客户端的角度来看一个DRPC调用跟一个普通的RPC调用没有任何区别。比如下面是客户端如何调用RPC计算“reach”功能(function)的结果,reach方法的参数是: http://twitter.com 。 DRPCClient client = new DRPCClient("drpc-host", 3772); String result = client.execute("reach"

大数据处理 Hadoop、HBase、ElasticSearch、Storm、Kafka、Spark

我只是一个虾纸丫 提交于 2019-11-30 07:27:23
场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,估计这哥们心里就会想推荐你妹呀。其实稍微了解点背景知识的码农们都知道,这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么你今天白天做的事情当然要明天才能反映出来啦。 实现一个实时计算系统 全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。否则最近这两年也不会有s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。先抛开s4,storm,puma这些系统不谈,我们首先来看一下,如果让我们自己设计一个实时计算系统,我们要解决哪些问题。 低延迟。都说了是实时计算系统了

Storm 是如何跟踪一条消息以及它衍生出来的消息都被成功处理的

眉间皱痕 提交于 2019-11-30 07:27:11
2012·2汇总 我们做 Notify Server 时可以间接借鉴这个解决方案的思路。 Storm 是一个分布式的、容错的实时计算系统,由 Twitter 开源。 先不介绍术语和背景知识,直接来一些吸引眼球的内容: 一,Tuple Tree spout 发射一个消息(tuple),可能会导致成百上千的消息基于此消息被创建。这些消息构成一个树状结构,我们称之为“tuple tree”。 tuple 是如何被跟踪的呢?系统中有成千上万的消息,如果为每个 spout 发送的消息都构建一棵树的话,很快内存就会耗尽。所以,必须采用不同的策略来跟踪每个消息。 二,Acker 跟踪 Tuple acker 对于 tuple 的跟踪算法是 storm 最大的突破。这个算法使得 对于任意大的一个 tuple tree, 它只需要恒定的20字节就可以进行跟踪了 。 Storm 系统中有一组叫做“acker”的特殊任务,它们负责跟踪 DAG(有向无环图)中的每个消息。每当发现一个 DAG 被完全处理,它就向创建这个根消息的 spout 任务发送一个信号。 原理很简单: 1)当一个消息被创建的时候(无论是在 spout 还是 bolt 中),系统都为该消息分配一个 64bit 的随机值作为id。这些 messageid 是 acker 用来跟踪由 spout 消息派生出来的 tuple tree 的。

Twitter Storm Ubuntu 单机安装

蹲街弑〆低调 提交于 2019-11-30 07:27:01
第 121 章 Twitter Storm 目录 121.1. 单机版 121.2. lein 安装 121.1. 单机版 操作系统环境:Ubuntu 13.04 KVM虚拟机 安装 storm 涉及到安装以下包:python、zookeeper、zeromq、jzmq、storm 过程 121.1. Ubuntu + Storm 单机环境安装 安装 zookeeper $ sudo apt-get install zookeeper zookeeper-bin zookeeperd 安装 zeromq 与 jzmq $ sudo apt-get install openjdk-7-jdk $ sudo apt-get install libzmq-dev 设置 JAVA_HOME 环境变量 $ export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64" 编译安装 jzmq $ cd /usr/local/src/ $ git clone git://github.com/nathanmarz/jzmq.git $ cd jzmq $ ./autogen.sh $ ./configure --prefix=/srv/jzmq-2.1.0 $ javac src/org/zeromq/*.java $ touch src

storm-环境搭建和第一个topology

半腔热情 提交于 2019-11-30 07:26:50
从原理到操作,还是有点距离 :) 基于 Linux ubuntu 3.13.0-24-generic ------------- 预备工作 * java * python(>=2.6) * zeromq * jzmq * zookeeper 下载(不需安装) wget https://github.com/downloads/nathanmarz/storm/storm-0.8.1.zip unzip storm-0.8.1.zip cd storm-0.8.1/ 配置--vim conf/storm.yaml ------------------------------------ # zookeeper的集群服务器地址(可多个) storm.zookeeper.servers: - "127.0.0.1" # nimbus 服务器 # 各个Supervisor工作节点需要知道哪个机器是Nimbus,以便下载Topologies的jars、confs等文件 nimbus.host: "127.0.0.1" # Nimbus和Supervisor进程用于存储少量状态,如jars、confs等的本地磁盘目录,需要提前创建该目录并给以足够的访问权限 storm.local.dir: "/home/admin/storm/workdir" # 对于每个Supervisor工作节点

如何在eclipse调试storm程序

[亡魂溺海] 提交于 2019-11-30 07:26:35
一、介绍 storm提供了两种运行模式:本地模式和分布式模式。本地模式针对开发调试storm topologies非常有用。 Storm has two modes of operation: local mode and distributed mode. In local mode, Storm executes completely in process by simulating worker nodes with threads. Local mode is useful for testing and development of topologies 因为多数程序开发者都是使用windows系统进行程序开发,如果在本机不安装storm环境的情况下,开发、调试storm程序。如果你正在为此问题而烦恼,请使用本文提供的方法。 二、实施步骤 如何基于eclipse+maven调试storm程序,步骤如下: 1.搭建好开发环境(eclipse+maven,本人使用的是eclipse Kepler 与maven3.1.1) 2.创建maven项目,并修改pom.xml,内容如pom.xml(机器联网,下载所需的依赖jar) Github上的pom.xml,引入的依赖太多,有些不需要,详细可以参考: https://github.com/nathanmarz/storm

Twitter Storm入门

风流意气都作罢 提交于 2019-11-30 03:58:41
.通过学习tutorial了解storm的整体架构( https://github.com/nathanmarz/storm/wiki/Tutorial ) 通过学习Concepts了解storm的关键概念( https://github.com/nathanmarz/storm/wiki/Concepts ) 通过学习Setting-up-a-Storm-cluster实际搭建一个storm cluster( https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster ) 通过学习Running-topologies-on-a-production-cluster实际创建一个project并运行在storm cluster上( https://github.com/nathanmarz/storm/wiki/Running-topologies-on-a-production-cluster ) 开始实战,确定你已经安装所有需要的软件: ==================== 启动zookeeper shawny @localhost :~/software/zookeeper-3.3.3/bin$ ./zkServer.sh start JMX enabled by default Using

Storm入门 第三章 Storm安装部署步骤

邮差的信 提交于 2019-11-30 03:58:26
本文以Twitter Storm 官方Wiki 为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出。 3.1 Storm集群组件 Storm集群中包含两类节点:主控节点(Master Node)和工作节点(Work Node)。其分别对应的角色如下: 1. 主控节点(Master Node)上运行一个被称为Nimbus的后台程序,它负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态。Nimbus的作用类似于Hadoop中JobTracker的角色。 2. 每个工作节点(Work Node)上运行一个被称为Supervisor的后台程序。Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程。每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。 Storm 集群组件 Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的。此外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。这意味着你可以用kill

Storm中数据的输入输出

左心房为你撑大大i 提交于 2019-11-29 22:45:28
转载请注明出处: http://blog.csdn.net/jmppok/article/details/17284817 概述 Storm是一个实时流处理系统,其中运行的是Topology。初学Storm的小伙伴可能会有这样的问题: 我写了Spout和Bolt,创建了Topology,提交到了Cluster中,然后呢? 怎么访问并使用这个Topology呢? 想象中的办法 刚开始接触Storm的时候,我猜想大概可以通过在Spout中监听一个端口如TCP Socket,HTTP之类的,外面向这个端口发送数据. 然后再最后一个Bolt中将处理数据写入文件/数据库/或者发送到指定的地址上。 理论上感觉应该是可行的,但是没有实践。 实际可以通过DPRC访问 进一步研究,发现有DRPC这个咚咚,只需要起一个DRPC Server ,并且把Topology创建为DRPC Topology,提交。就可以通过DRPCClient对该topology进行访问了。十分方便。 Storm中专业的做法 再深入一步,发现原来Storm中正确的做法应该是这样的: 集成一个通讯中间件,外部应用通过该中间件发送数据,Spout订阅这些数据,并发射....,当Bolt处理完之后又可通过该通讯中间件发送出去给应用。 具体可参考:https://github.com/nathanmarz/storm/wiki

Storm官方文档翻译之设置开发环境

天大地大妈咪最大 提交于 2019-11-29 21:27:05
本文将介绍如何设置Storm的开发环境。下面是大纲: 1. 下载 Storm发布包,解压,将解压的 bin目录放到你电脑的PATH中。 2.为了能够在远程集群中启动或者停止Topology,请将集群信息放到~/.storm/storm.yaml中 下面是步骤的详细说明。 什么是开发环境? Storm有两种运行模式:本地模式和远程模式。在本地模式下,你完全可以使用本地机器来开发和测试Topology。在远程模式下,提交Topology到远程集群执行。 Storm开发环境包含了所有工具,因此你可以在本地模式开发和测试Topology,打包并在远程集群中运行,向集群提交或者kill掉Topology。 我们来快速了解下本地机器和远程集群的关系。一个Storm集群由一个叫"Nimbus"的主节点管理。你的机器和Nimbus通信同时向远程集群提交代码(打包成jar)和Topology,Nimbus 会分发你的代码并且分配worker运行你提交的Topology,你的机器使用storm客户端来和Nimbus通信。Storm客户端只能在远程模式下使用;它在本地模式下不起作用。 本地安装Storm 如果你想从你的机器提交Topology到远程集群,你需要在本地安装Storm。通过客户端和远程集群交互。要在本地安装Storm点击 此处 下载Storm发布包,并且将其解压在你电脑的某个地方