Storm从源码安装以及初步运行

由于项目需要对Storm进行进一步开发,所以就研究了一下Storm.拿到源代码之后,先是手动编译了一下,再运行了一个demo尝试了一下.

编译Storm

没想到光是手动编译就花费了不少时间.

最终,写了一个脚本帮助编译:

# !/bin/bash
mvn clean package install -DskipTests=true 
&& cd storm-dist/binary 
&& mvn package -Dgpg.skip=true
&& cp target/apache-storm-1.1.0.tar.gz ~/source_code/apache-storm-1.1.0/compiled 
&& cd  ~/source_code/apache-storm-1.1.0/compiled 
&& tar zxvf apache-storm-1.1.0.tar.gz

运行此脚本需要你先进入到storm所在的目录.

这里我在storm所在的目录下新建了一个目录,compiled.这个目录中,存放经过编译后可以真正运行的storm.各位可以根据自己的情况进行修改.

这样编译完了storm并设置好环境变量之后,就可以运行storm了,我设置的环境变量如下:

export STORM_HOME=/home/alstonwilliams/source_code/apache-storm-1.1.0/compiled/apache-storm-1.1.0
export STORM_CLASSPATH=${STORM_HOME}/lib

export CLASSPATH=.:${STORM_CLASSPATH}
export PATH=${STORM_HOME}/bin:$PATH

Storm中,需要用ZooKeeper来管理状态信息等元数据,所以我们还需要安装ZooKeeper.ZooKeeper我们不需要从源码安装,直接从官网下载下来并注意设置好环境变量即可.然后通过下面的命令启动ZooKeeper:

your_ZooKeeper_installation/bin/zkServer.sh start

然后可以通过下面的命令查看是否启动成功:

your_ZooKeeper_installation/bin/zkCli.sh

安装好ZooKeeper之后,我们还需要为Storm进行配置,在directory_which_contains_storm_after_compiling/conf目录中,新建文件storm.yaml,写入下面的配置:

storm.zookeeper.servers:
  - "localhost"

storm.local.dir: "/home/alstonwilliams/source_code/apache-storm-1.1.0/data"

nimbus.host: "localhost"

supervisor.slots.ports:
  - 6700
  - 6701
  - 6702
  - 6703

上面的配置文件,设置了ZooKeeper所在的主机,Storm的数据目录,Supervisor的端口.你可以根据自己的需要进行修改.更多参数请查看Storm官方文档.

然后就可以通过下面的命令分别启动nimbus, supervisor:

storm nimbus
storm supervisor

写个Demo试试

终于启动起来Storm了.我们还要写个demo跑一下试试.

这里不给出demo的代码了,各位感兴趣的话,自己去Tutorials这个网站上自己看吧,对应的网址是:https://www.tutorialspoint.com/apache_storm/apache_storm_working_example.htm.不过这个网站可能会被墙,即使没有被墙,打开速度可能也会挺慢.

终于把Demo写完了.运行mvn package打包一下,再用java -jar target/demo.jar运行一下试试,这时你会遇到no main manifest attribute错误.

这是因为mvn package之后得到的jar包,并不是一个可运行的jar包,其中缺少了依赖,以及一些必要的文件.在pom.xml中,添加下面的Snippet:

    <build>
        <plugins>
            <!-- any other plugins -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.projecthome.LogAnalyserStorm</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

将其中的mainClass部分换成你的主类的完全限定类名.然后,再用mvn package一下,你能在target目录下,看到两个jar文件,一个是demo.jar,另一个是demo-jar-with-dependencies.jar.在demo-jar-with-dependencies中,包含了需要的依赖.

现在,你就可以通过java -jar demo-jar-with-dependencies.jar命令来启动单机版Storm并查看结果了.

好,上面我们知道了如何在开发模式下运行Storm Demo了.但是,我们开发完之后,要提交到Storm集群上运行吧.而上面我们只是让Demo在本地运行,其实在本地运行的话,你不需要安装Storm和ZooKeeper也是可以的.那么我们应该如何来做呢?

将和LocalCluster相关的部分,换成StormSubmitter.

比如:

public class LogAnalyserStorm {

  public static void main(String[] args) throws Exception{
    Config config = new Config();
    config.setDebug(true);

    TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("call-log-reader-spout", new FakeCallLogReaderSpout());

    builder.setBolt("call-log-creator-bolt", new CallLogCreatorBolt())
            .shuffleGrouping("call-log-reader-spout");
    builder.setBolt("call-log-counter-bolt", new CallLogCounterBolt())
            .fieldsGrouping("call-log-creator-bolt", new Fields("call"));

//    LocalCluster cluster = new LocalCluster();
//    cluster.submitTopology("LogAnalyserStorm", config, builder.createTopology());

    StormSubmitter.submitTopology("LogAnalyserStorm", config, builder.createTopology());

//    Thread.sleep(10000);

//    cluster.shutdown();

  }

}

然后使用mvn package构建一下.然后上传jar文件并在Storm集群上通过storm jar demo.jar your_main_class_fqdn需要注意的是,上传的时候,要上传那个不包含storm-core依赖的jar包.在我们的demo中,就是上传那个demo.jar.因为如果上传demo-jar-with-dependencies.jar,会由于Storm集群上本身已经存在Storm-core.jar包并且包含了相同的defaults.yaml文件,而运行失败.

当然,在实际开发中,我们还可能依赖其他的包,这时候,我们可以通过在pom.xml中,将storm-core这个依赖的scope设置为provided,让其在打包时不要包含storm-core这个依赖.然后上传demo-jar-with-dependencies.jar

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,796评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,945评论 25 707
  • Date: Nov 17-24, 2017 1. 目的 积累Storm为主的流式大数据处理平台对实时数据处理的相关...
    一只很努力爬树的猫阅读 2,165评论 0 4
  • 想过的 没想过的 走过的 没走过的 相互取暖 各自安好
    顾静宸阅读 212评论 0 0