在麒麟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日

相关文章

  • MySQL root修改普通用户密码

    MySQL是一种流行的关系型数据库管理系统,它被广泛用于各种应用程序中。作为MySQL的管理员,我们需要时常修改普通用户的密码以确保数据库的安全性。 在MySQL中,root用户是拥有最高权限的用户。如果我们需要修改普通用户的密码,那么我们需要使用root用户登录MySQL并进行操作。 下面是MySQL root修改普通用户密码的方法详解: 步骤1:使用ro…

    MySQL 2023年3月10日
    00
  • Oracle ORA-00904:标识符无效解决方法(太坑了!!)

    当我们在使用Oracle数据库时,有可能遇到”ORA-00904:标识符无效”的错误,这是Oracle提示我们所使用的标识符不存在或者无效,这个错误可能出现在SQL语句中的任何地方,如列名、表名、函数名等,下面针对这个错误提供完整的解决攻略。 1. 检查拼写错误 ORA-00904错误最常见的原因是拼写错误,当你使用SQL语句时,需要仔细检查是否有错别字,如…

    database 2023年5月21日
    00
  • 关于ruby安装在windows gem install redis-dump 报错:MSYS2 could not be found

    https://rubyinstaller.org/downloads/ ruby windows安装地址  安装带devkit的这样就自带MSYS2 不然报错 success 不再报错  

    Redis 2023年4月13日
    00
  • spring boot集成redisson的最佳实践示例

    针对“spring boot集成redisson的最佳实践示例”的完整攻略,我将按照以下步骤进行讲解: 导入Redisson依赖 配置Redisson连接信息 编写基本的Redisson工具类 使用Redisson进行操作 示例说明1:基于Redisson的分布式锁实现 示例说明2:基于Redisson的分布式限流实现 接下来将分别进行讲解。 1. 导入Re…

    database 2023年5月22日
    00
  • SQL Server 2012 sa用户登录错误18456的解决方法

    SQL Server 2012 sa用户登录错误18456的解决方法攻略 背景 在使用SQL Server 2012时,可能会出现sa用户登录错误18456的情况,这种错误通常是由于登录凭据(用户名和密码)不正确或者SQL Server实例配置问题引起的。本攻略将为您提供解决此类错误的方法。 解决方法 以下是解决SQL Server 2012 sa用户登录错…

    database 2023年5月21日
    00
  • 5个常用的MySQL数据库管理工具详细介绍

    5个常用的MySQL数据库管理工具详细介绍 本文将介绍5个常用的MySQL数据库管理工具,包括Navicat、HeidiSQL、MySQL Workbench、Sequel Pro、phpMyAdmin,分别从特点、优缺点、界面、功能等方面进行详细的介绍和比较。 1. Navicat Navicat是一款完整的数据库管理工具,支持MySQL、MongoDB和…

    database 2023年5月19日
    00
  • MySQL为什么临时表可以重名

    MySQL为什么临时表可以重名 在MySQL中,临时表具有与普通表相同的生命周期,但其作用范围仅限于当前的会话。另外,临时表的表名也是在当前会话中有效的。 因为MySQL是会话级数据库,不同的客户端可以在同一服务端相互独立地同时运行。为了防止不同的客户端使用相同的临时表名产生冲突,MySQL允许同一个数据库中的临时表名可以重复。 例如,如果一个客户端定义了一…

    database 2023年5月22日
    00
  • 详解MySQL BETWEEN AND:范围查询

    MySQL BETWEEN AND 是一种用于范围查询的操作符,它可以帮助我们方便地查询某个数值或日期在某个范围内的记录。 它的语法如下: SELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2; 其中, table_name 是我们要查询的表名。 column_name 是我…

    MySQL 2023年3月9日
    00
合作推广
合作推广
分享本页
返回顶部