在麒麟V10服务器上编译安装Storm的详细过程

下面是在麒麟V10服务器上编译安装Storm的详细过程的完整攻略:

准备工作

在开始之前,需要做好以下准备:

  1. 安装Java Development Kit(JDK):Storm是用Java编写的,需要JDK才能进行编译和执行。在麒麟V10服务器上,可以通过以下命令安装JDK:

sudo apt-get install default-jdk

  1. 安装Maven:Storm的编译需要使用Maven进行依赖管理。在麒麟V10服务器上,可以通过以下命令安装Maven:

sudo apt-get install maven

下载和编译Storm

  1. 下载Storm:可以从Storm官网(https://storm.apache.org/downloads.html)下载最新版本的Storm。下载完成后,解压缩到任意目录。

  2. 编译Storm:进入Storm源代码目录,执行以下命令进行编译:

mvn clean install -DskipTests=true

上述命令会将Storm的所有依赖包下载到本地,编译生成Storm的jar包,并安装到本地的Maven仓库中。

运行Storm

在编译完成后,可以通过以下命令来启动Storm:

bin/storm nimbus   # 启动Nimbus节点
bin/storm supervisor   # 启动Supervisor节点
bin/storm ui   # 启动Storm Web UI

此时,可以在浏览器中访问http://localhost:8080来访问Storm的Web UI。

示例:使用Storm进行单词计数

下面是使用Storm进行单词计数的示例,包含Topology定义和代码实现:

Topology定义

public class WordCountTopology {
    public static void main(String[] args) throws Exception {
        TopologyBuilder builder = new TopologyBuilder();

        builder.setSpout("spout", new RandomSentenceSpout(), 5);
        builder.setBolt("split", new SplitSentenceBolt(), 8).shuffleGrouping("spout");
        builder.setBolt("count", new CountBolt(), 12).fieldsGrouping("split", new Fields("word"));

        Config conf = new Config();
        conf.setDebug(true);

        LocalCluster cluster = new LocalCluster();
        cluster.submitTopology("word-count", conf, builder.createTopology());

        Utils.sleep(10000);

        cluster.killTopology("word-count");
        cluster.shutdown();
    }
}

上述代码定义了一个拓扑结构,包含三个组件:spout、split和count。其中,spout组件用来产生随机的句子;split组件将句子拆分为单词;count组件将每个单词的计数汇总。

代码实现

  1. 创建RandomSentenceSpout类,用来产生随机的句子:

```java
public class RandomSentenceSpout extends BaseRichSpout {
private SpoutOutputCollector collector;
private Random rand;

   public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
       this.collector = collector;
       this.rand = new Random();
   }

   public void nextTuple() {
       Utils.sleep(100);
       String[] sentences = new String[]{
               "the cow jumped over the moon",
               "an apple a day keeps the doctor away",
               "four score and seven years ago",
               "snow white and the seven dwarfs",
               "i am at two with nature"
       };
       String sentence = sentences[rand.nextInt(sentences.length)];
       collector.emit(new Values(sentence));
   }

   public void declareOutputFields(OutputFieldsDeclarer declarer) {
       declarer.declare(new Fields("sentence"));
   }

}
```

  1. 创建SplitSentenceBolt类,用来将句子拆分为单词:

```java
public class SplitSentenceBolt extends BaseRichBolt {
private OutputCollector collector;

   public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
       this.collector = collector;
   }

   public void execute(Tuple tuple) {
       String sentence = tuple.getStringByField("sentence");
       String[] words = sentence.split(" ");
       for (String word : words) {
           collector.emit(new Values(word));
       }
   }

   public void declareOutputFields(OutputFieldsDeclarer declarer) {
       declarer.declare(new Fields("word"));
   }

}
```

  1. 创建CountBolt类,用来汇总每个单词的计数:

```java
public class CountBolt extends BaseRichBolt {
private OutputCollector collector;
private Map counts = new HashMap();

   public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
       this.collector = collector;
   }

   public void execute(Tuple tuple) {
       String word = tuple.getStringByField("word");
       int count = 0;
       if (counts.containsKey(word)) {
           count = counts.get(word);
       }
       count++;
       counts.put(word, count);

       collector.emit(new Values(word, count));
   }

   public void declareOutputFields(OutputFieldsDeclarer declarer) {
       declarer.declare(new Fields("word", "count"));
   }

}
```

完成上述代码后,运行WordCountTopology类即可启动单词计数拓扑,可以在Storm的Web UI中查看拓扑的运行状态和结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在麒麟V10服务器上编译安装Storm的详细过程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 【原创】并发数优化–java+ssh+c3p0+tomcat+mysql+windows2008-64位

    新项目开发完毕,到了项目部署,没得选也是我来弄了! 最主要的问题:并发数!   这个所有客户数量较大的服务器都会遇到的问题。 虽然现在还没有解决,哈哈哈哈哈哈哈哈哈哈哈哈哈,但是记录下我现在所做的工作吧!   一、数据库 1,数据库:       数据库选择的是MySql 5.1,正常安装,未做优化,只是调整了最大连接数“max_connections=10…

    MySQL 2023年4月13日
    00
  • springboot druid数据库连接池连接失败后一直重连的解决方法

    问题描述: 在使用 Spring Boot 集成 Druid 数据库连接池时,连接失败后 Druid 会一直重试连接,但是重试的频率比较低(默认为 1 分钟重连一次),导致数据库宕机或者网络出现波动时,数据源的恢复时间过长,影响了系统的可用性。 解决方法: 为了解决这个问题,可以如下进行配置: 1、设置 testWhileIdle 为 true 在 Drui…

    database 2023年5月18日
    00
  • 安装MySQL常见的三种方式

    下面我将详细讲解“安装MySQL常见的三种方式”的完整攻略。MySQL是一个开源的关系型数据库管理系统,支持多种操作系统,拥有强大的数据处理能力和高可靠性,是Web应用程序开发的重要工具之一。下面是三种常见的安装MySQL的方式: 1.通过官网下载并安装 访问MySQL官网(https://www.mysql.com),点击“Downloads”选项卡,选择…

    database 2023年5月22日
    00
  • redis与ssm整合方法(mybatis二级缓存)

    下面是 Redis 与 SSM 整合的步骤及示例: 一、设置 Redis 安装 Redis,启动 Redis 服务 配置 Redis bash # Redis 默认监听本机地址 127.0.0.1 # 如果 Redis 开启了认证,此处需要填入认证密码 spring.redis.host=127.0.0.1 spring.redis.port=6379 sp…

    database 2023年5月22日
    00
  • Oracle SQL树形结构查询

    下面是关于Oracle SQL树形结构查询的完整攻略: 1.概述 在面对需要处理树形结构的数据时,使用Oracle SQL来查询数据不是一个简单的任务。Oracle SQL支持使用递归查询来返回树形结构,这种方法被称为“WITH RECURSIVE”(或者是“CONNECT BY”)查询。接下来将详细地介绍“WITH RECURSIVE”查询。 2.使用WI…

    database 2023年5月21日
    00
  • 当Mysql行锁遇到复合主键与多列索引详解

    当Mysql行锁遇到复合主键与多列索引,会有一些需要注意的地方。在实践中,我们需要对MySQL的锁机制有一个清晰的认识,才能更好地优化我们的数据库的性能。 什么是行锁 MySQL中的锁,分为行级锁和表级锁。表级锁是对整张表进行锁定,而行级锁则是只对表中的一行或多行数据进行锁定。 行级锁是MySQL中非常重要的一个特性,它可以极大地提高并发性能。在高并发的应用…

    database 2023年5月22日
    00
  • MySQL truncate table语句的使用

    MySQL中的Truncate Table语句允许我们快速清空数据库中特定表中的全部数据,它与Delete语句有一些不同点,本篇攻略将详细讲解Truncate Table语句的使用。 语法和用法 下面是 Truncate Table 语句的基本语法: Truncate Table table_name; 其中,table_name参数是要清空数据的表名。 注…

    database 2023年5月22日
    00
  • MySQL数据库入门之备份数据库操作详解

    MySQL数据库入门之备份数据库操作详解 在数据库管理中,备份数据库是至关重要的操作,一旦数据丢失或被损坏,备份数据就可以发挥极大的作用。MySQL数据库是目前最流行的开源数据库之一,在备份数据库方面也提供了多种途径和工具,下面我们就来详细讲解一下。 为什么备份数据库很重要? 在数据库管理中,备份是最基本的操作之一,备份数据库可以很好的保护我们数据的安全。当…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部