Storm集群可以搭建在AWS上,也可以直接手动部署在集群机器上。这里使用手动搭建的方式部署在一个机器上。
环境:ubuntu 13.10 64bit
1.Java安装
Java1.6的安装就不多的说了。
2.python安装
ubuntu自带了
3.zookeeper
单机模式部署方式
http://zookeeper.apache.org/doc/r3.3.3/zookeeperStarted.html#sc_InstallingSingleMode
wget http://apache.fayea.com/apache-mirror/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz chmod a+x zookeeper-3.4.5.tar.gz tar zxvf zookeeper-3.4.5.tar.gz
进入conf目录下,新建zoo.cfg文件
tickTime=2000 dataDir=/var/zookeeper clientPort=2181
dataDir是zk用于存储文件的地址,确保运行用户有权限访问该目录
启动zk
bin/zkServer.sh start
验证一下
echo ruok|nc localhost 2181
返回 imok说明zk起来了
4.ZeroMQ
wget http://download.zeromq.org/zeromq-2.1.7.tar.gz tar -xzf zeromq-2.1.7.tar.gz cd zeromq-2.1.7 ./configure make sudo make install
期间可能遇到一些软件ubuntu没有安装 sudo apt-get install xxx 安装即可
5.JZMQ
git clone https://github.com/nathanmarz/jzmq.git cd jzmq ./autogen.sh ./configure make sudo make install
git的安装和配置
sudo apt-get install git git config --global user.name author #将用户名设为author git config --global user.email author@corpmail.com #将用户邮箱设为author@corpmail.com
期间遇到的问题:
(1).make[1]: *** 没有规则可以创建“org/zeromq/ZMQ.class”需要的目标“classdist_noinst.stamp”。 停止
修正方法,创建classdist_noinst.stamp文件,
touch src/classdist_noinst.stamp
(2).错误:无法访问 org.zeromq.ZMQ
修正方法,进入src目录,手动编译相关java代码
javac -d . org/zeromq/*.java
6.Storm
下载最新release版本0.9.0.1
解压
tar zxvf storm-0.9.0.1.tar.gz
修改Storm的配置文件 conf/storm.yaml
storm.zookeeper.servers: - "localhost" storm.local.dir: "/home/username/storm-0.9.0.1/workdir" nimbus.host: "localhost"
说明:
storm.zookeeper.servers:这里使用的zk是本地的,所以用localhost
nimbus.host: 指明nimbus所在的机器
启动:
启动控制节点nimbus
bin/storm nimbus >/dev/null 2>&1 &
启动任务节点supervisor
bin/storm supervisor >/dev/null 2>&1 &
启动ui: 在nimbus节点上运行
bin/storm ui >/dev/null 2>&1 &
UI启动后,可以通过 http://localhost:8080观察集群运行情况。
7.HelloWorld
这里使用《Getting started with Strom》书中的例子,这是一个word count 的例子
https://github.com/storm-book/examples-ch02-getting_started/zipball/master
需要修改一下pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>storm.book</groupId> <artifactId>Getting-Started</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <compilerVersion>1.6</compilerVersion> </configuration> </plugin> </plugins> </build> <repositories> <!-- Repository where we can found the storm dependencies --> <repository> <id>clojars.org</id> <url>http://clojars.org/repo</url> </repository> </repositories> <dependencies> <!-- Storm Dependency --> <dependency> <groupId>storm</groupId> <artifactId>storm</artifactId> <version>0.9.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.esotericsoftware.kryo</groupId> <artifactId>kryo</artifactId> <version>2.17</version> </dependency> </dependencies> </project>
由于例子中没有输出机制,这里使用写文件的方式来验证程序的正确性。
修改WordCounter类,增加一个局部变量
private FileWriter fileWriter;
修改prepare方法
@Override public void prepare(Map stormConf, TopologyContext context) { this.counters = new HashMap<String, Integer>(); this.name = context.getThisComponentId(); this.id = context.getThisTaskId(); try { this.fileWriter = new FileWriter((String) stormConf.get("outFile")); } catch (IOException e) { throw new RuntimeException("Error write file ["+stormConf.get("outFile")+"]"); } }
修改execute方法
@Override public void execute(Tuple input, BasicOutputCollector collector) { String str = input.getString(0); /** * If the word dosn't exist in the map we will create * this, if not We will add 1 */ if(!counters.containsKey(str)){ counters.put(str, 1); }else{ Integer c = counters.get(str) + 1; counters.put(str, c); } if(this.fileWriter != null){ try { fileWriter.write("Thread " + Thread.currentThread().getName() + " log counters===================" + counters); fileWriter.write("\r\n"); fileWriter.write("===================================================="); fileWriter.write("\r\n"); fileWriter.flush(); } catch (IOException e) { e.printStackTrace(); } } }
修改TopologyMain的main方法
public class TopologyMain { public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException { //Topology definition TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("word-reader",new WordReader()); builder.setBolt("word-normalizer", new WordNormalizer()) .shuffleGrouping("word-reader"); builder.setBolt("word-counter", new WordCounter(),(Number)1) .fieldsGrouping("word-normalizer", new Fields("word")); //Configuration Config conf = new Config(); conf.put("wordsFile", args[0]); conf.put("outFile", args[1]); conf.setDebug(true); //Topology run conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1); conf.setNumWorkers(3); StormSubmitter.submitTopology("Getting-Started-Toplogie", conf, builder.createTopology()); // LocalCluster cluster = new LocalCluster(); // cluster.submitTopology("Getting-Started-Toplogie", conf, builder.createTopology()); // Thread.sleep(1000); // cluster.shutdown(); } }
mvn install 打包之后,得到Getting-Started-0.0.1-SNAPSHOT.jar文件
创建数据源文件 words.txt
Storm test are great is an Storm simple application but very powerful really Storm is great
提交到集群运行
到storm安装目录
bin/storm Getting-Started-0.0.1-SNAPSHOT.jar TopologyMain /tmp/words.txt /tmp/words-result.txt
运行之后,在/tmp 目录下发现新生成的words-result.txt文件,内容如下
Thread Thread-16-word-counter log counters==================={storm=1} ====================================================Thread Thread-16-word-counter log counters==================={test=1, storm=1} ====================================================Thread Thread-16-word-counter log counters==================={are=1, test=1, storm=1} ====================================================Thread Thread-16-word-counter log counters==================={great=1, are=1, test=1, storm=1} ====================================================Thread Thread-16-word-counter log counters==================={is=1, great=1, are=1, test=1, storm=1} ====================================================Thread Thread-16-word-counter log counters==================={is=1, great=1, are=1, test=1, an=1, storm=1} ====================================================Thread Thread-16-word-counter log counters==================={is=1, great=1, are=1, test=1, an=1, storm=2} ====================================================Thread Thread-16-word-counter log counters==================={is=1, great=1, are=1, test=1, simple=1, an=1, storm=2} ====================================================Thread Thread-16-word-counter log counters==================={application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=2} ====================================================Thread Thread-16-word-counter log counters==================={but=1, application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=2} ====================================================Thread Thread-16-word-counter log counters==================={but=1, application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=2, very=1} ====================================================Thread Thread-16-word-counter log counters==================={but=1, application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=2, powerful=1, very=1} ====================================================Thread Thread-16-word-counter log counters==================={really=1, but=1, application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=2, powerful=1, very=1} ====================================================Thread Thread-16-word-counter log counters==================={really=1, but=1, application=1, is=1, great=1, are=1, test=1, simple=1, an=1, storm=3, powerful=1, very=1} ====================================================Thread Thread-16-word-counter log counters==================={really=1, but=1, application=1, is=2, great=1, are=1, test=1, simple=1, an=1, storm=3, powerful=1, very=1} ====================================================Thread Thread-16-word-counter log counters==================={really=1, but=1, application=1, is=2, great=2, are=1, test=1, simple=1, an=1, storm=3, powerful=1, very=1} ====================================================
参考:
https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster
http://zookeeper.apache.org/doc/r3.3.3/zookeeperStarted.html
http://blog.csdn.net/thermosym/article/details/9254799
相关推荐
标题中的"storm0.9.0jar包"指的是Apache Storm的0.9.0版本的JAR文件。Apache Storm是一个开源的分布式实时计算系统,它允许开发者处理无界数据流,具有高度容错性和高吞吐量的特点。这个JAR包是Storm的核心组件,...
Storm 0.9.0 是一个流行的开源分布式实时计算系统,由Twitter开发并维护,它在大数据处理领域具有广泛的应用。这个Linux安装包是专为那些无法直接从Storm官方网站下载的用户准备的,包含了所有在Linux环境下安装和...
文件名:choerodon-database-init.zip 描述:[猪齿鱼_01_环境搭建(一)_微服务支撑...猪齿鱼版本:0.9.0 CSDN上传资源后默认5分,修改不了积分。若没有积分,可在博客下方评论区留下你的邮箱,博主看到后会发送给你
在Storm 0.9.0版本中,开发者需要构建自己的jar包来部署拓扑(topology)。这个过程涉及到以下几个关键知识点: 1. **安装与配置**:首先,你需要在本地安装Java Development Kit (JDK) 并配置好环境变量。然后,...
java运行依赖jar包
seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0seata-server-0.9.0...
它提供了丰富的功能,如可视化数据浏览、数据导入导出、集群管理、脚本执行等,使得日常的数据库维护工作更为轻松。 "mogodb 客户端"标签进一步明确了Robomongo的角色,它是MongoDB的客户端工具。作为客户端,它...
seata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata-0.9.0.rarseata...
**torchvision 0.9.0 深度学习库详解** `torchvision`是PyTorch框架的一个重要扩展库,专为计算机视觉任务而设计。在0.9.0版本中,它提供了丰富的功能,包括数据集、数据加载器、模型、转换函数以及用于图像分类、...
本文将详细介绍如何利用Flume、Kafka和Storm搭建一个大数据消息平台。 首先,我们来了解Flume。Flume是Cloudera公司提供的一款分布式、可靠且高可用的海量日志采集、聚合和传输的系统。它允许你定制数据发送方,...
在`torchvision-0.9.0`版本中,我们能够获取到该版本的特定功能和优化。 **安装PyTorch 1.7至1.8版本时的Torchvision依赖** 在描述中提到,`torchvision-0.9.0`是针对PyTorch 1.7到1.8版本使用的。这意味着在这些...
最后,pandas-0.9.0.win32-py2.7.exe是Windows环境下针对Python 2.7的安装包,用户可以直接运行此文件进行安装,快速搭建数据分析环境。 总的来说,pandas 0.9.0版本虽然相比现在的最新版在功能上有所欠缺,但它...
这个是jetson上使用的torchvision0.9.0版本源码,解压后使用 sudo python3 setup.py install即可安装,编译大约耗时30分钟完成,请耐心等待,安装这个源码之前您必须安装好torch-1.8.0-cp36-cp36m-linux_aarch64.whl...
这个项目允许用户在本地搭建自己的魔兽世界服务器,进行游戏体验、测试或者进行二次开发。其压缩包文件 "mangos-0.9.0.tar.gz" 指示这是一个使用 tar 压缩工具,并通过 gzip 进一步压缩的文件,通常在 Linux 或类 ...
Jadx 0.9.0系列功能大幅度提升
Robomongo0.9.0官网最新版、
在本案例中,我们关注的是QEMU的0.9.0版本,专为Windows操作系统设计。 QEMU的核心功能在于它能够模拟各种处理器架构,包括x86、x86_64、ARM、MIPS、PowerPC等,允许用户在一台物理机器上运行多种操作系统和应用...
"proxool-0.9.0RC3.jar" 是一个Java档案文件,它包含了Proxool库的0.9.0RC3版本。Proxool是开源的Java连接池实现,设计用于提供数据库连接管理服务,它使得在多线程环境中高效地管理和重用数据库连接成为可能。连接...