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

yizhihongxing

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

相关文章

  • Linux给普通用户加超级用户权限的方法

    给普通用户加超级用户权限的方法通常有两种方式:使用sudo命令和使用su命令。 使用sudo命令 首先需要在超级用户下开启sudo权限,可以使用以下命令: $ su – # visudo 在打开的文件中找到以下内容: ## Allow root to run any commands anywhere root ALL=(ALL) ALL 在该行下方添加以下…

    database 2023年5月22日
    00
  • MySQL的视图和索引用法与区别详解

    MySQL的视图和索引是数据库的两个重要组成部分,它们在数据库查询和性能优化方面发挥着重要的作用。本文将详细讲解MySQL的视图和索引的用法和区别,并提供两个示例帮助你更好地理解。 一、MySQL的视图 1.1 什么是视图 视图是一个虚拟的表,它是从一个或多个表中派生出来的。视图并不在数据库中实际存在,它只是一个预定义的查询,对于用户而言,它看起来像是一张表…

    database 2023年5月22日
    00
  • SQL常用日期查询语句及显示格式设置

    下面就对SQL常用日期查询语句及显示格式设置进行详细讲解。 一、日期格式 在SQL中,日期时间类型有很多种表示方法,包括日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(TimeStamp),不同的数据库支持的日期时间类型也有所不同。在使用SQL中,一般建议按照ISO标准进行日期时间的表示,即yyyy-MM-dd格式表示日期,HH:m…

    database 2023年5月21日
    00
  • 不能使用“;文件已在使用中 Microsoft JET Database Engine

    当我们在使用Microsoft JET Database Engine进行数据库操作时,有时会遇到一个提示错误:“不能使用“;文件已在使用中 Microsoft JET Database Engine”。这个错误提示表明正在尝试访问的数据库已经在使用中,无法进行操作。下面我将为大家详细讲解如何解决这个问题。 问题原因 造成这个问题的原因可能有很多,以下列举了…

    database 2023年5月21日
    00
  • python 连接 redis cluster 集群

    一. redis集群模式有多种, cluster模式只是其中的一种实现方式, 其原理请自行谷歌或者百度, 这里只举例如何使用Python操作 redis cluster 集群   二. python 连接 redis cluster 集群   第三方库:     redis-py-cluster: 最近还在维护     rediscluster: 似乎很久没…

    Redis 2023年4月11日
    00
  • Linux中Oracle数据库备份

    以下是针对“Linux中Oracle数据库备份”的完整攻略: 准备工作 在备份之前,你需要准备以下工作: 安装Oracle数据库 确保已经安装好了备份软件RMAN(Recovery Manager) 确保备份的目录已经存在,具有足够的磁盘空间 备份过程 第一步:备份控制文件 控制文件包含了Oracle数据库的架构和元数据信息,是数据库的一部分,可以用来恢复数…

    database 2023年5月21日
    00
  • mysql中json_remove函数的使用?

    需求描述:   今天看json记录,可以通过json_remove函数对一个key或多个key从个json记录中去掉. 操作过程: 1.查看一个已经存在的json表 mysql> select * from tab_json; +—-+———————————————————…

    MySQL 2023年4月13日
    00
  • redis5.5官方文档

    https://www.cnblogs.com/zsl-find/articles/11780974.html 博客 https://redis.io/topics/cluster-tutorial 官方 https://www.cnblogs.com/zgqbky/p/11792141.html 博客   新虚拟机 2G内存,配yum源 配置JDK环境 y…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部