8.2.0Storm集成Redis

原创 2018年04月17日 17:08:43

Storm集成Redis

一、       新建项目

二、       导入Pom依赖

<dependencies>
  <dependency>
    <groupId>junit</groupId>
   <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>1.1.0</version>
    <scope>provided</scope>
   <!--<scope>compile</scope>-->
  </dependency>
  <dependency>
   <groupId>org.apache.storm</groupId>
   <artifactId>storm-redis</artifactId>
    <version>1.1.0</version>
  </dependency>
  <dependency>
   <groupId>org.apache.storm</groupId>
   <artifactId>storm-kafka</artifactId>
    <version>1.1.0</version>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
     <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
         <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
           <mainClass>com.simon.storm.URLCountTopology</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
         <id>make-assembly</id>
         <phase>package</phase>
          <goals>
           <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>


三、       定义Spout

            继承BaseRishSpout,重写方法。

public static class URLCountSpout extends BaseRichSpout {
   //模拟数据
   String[] phones = { "xiaomi", "apple", "huawei", "moto", "nokia", "sansung", "LG" ,"htc","Iphone", "dell", "huasuo", "hongqi", "lianxiang", "lenovo","shunfeng","meituan", "alibaba", "wangyi", "qq", "luoji", "leise","nongfu", "yibao","rongyao", "oppo", "vivo"};
   private SpoutOutputCollector collector;
   // 从外部数据源(比如kafka消息缓存中)获取url数据,源源不断获取
   @Override
   public void nextTuple() {
      //休眠一下
      Utils.sleep(500);
      //模拟产生数据
      int index = new Random().nextInt(20);
      String phone = phones[index];
      // 将拿到的数据封装为tuple发送出去
      //collector在open方法中,需要设置为全局
      // 一个tuple中可以封装多个数据(类似list的元素)
      // collector.emit(new Values("value1","value2","value3"));
      String url =  phone + UUID.randomUUID();
      collector.emit(new Values(url));
   }
   @Override
   public void open(Map config, TopologyContext context, SpoutOutputCollector collector) {
      this.collector = collector; 
   }
   @Override
  public void declareOutputFields(OutputFieldsDeclarer declarer) {
      // 为发出去的tuple中的每一个字段定义一个名字
      // declarer.declare(new Fields("field1","field2","field3"));
      declarer.declare(new Fields("url"));
   }
}

四、定义Bolt

public static class URLCountRedisBolt extends BaseRichBolt{
   private Jedis jedis = null;
   @Override
   public void prepare(Map conifg, TopologyContext context, OutputCollector collector) {
      jedis = new Jedis("10.10.56.138",6379);
   }
   @Override
   public void execute(Tuple tuple) {
      String word = tuple.getString(0);
      //截取url中的网站名字
      if(word != null){
         //将url写入到redis的一个zset集合中
         // 参数1: zset的主键 参数2:要增加的分数 参数3:url中的网站部分——site
         jedis.zincrby("kafkawords", 1, word);
      }
   }
   /**
    * 没有后续组件了,所以不需要定义输出tuple的schema
    */
   @Override
   public void declareOutputFields(OutputFieldsDeclarer declarer) {
   }
}

五、定义Topology主函数

public static void main(String[] args) throws AlreadyAliveException, 
      InvalidTopologyException, AuthorizationException {
   TopologyBuilder builder =  new TopologyBuilder();
   //2、添加spout和bolt
   builder.setSpout("urlspout", new URLCountSpout());
   builder.setBolt("rediscountbolt", new URLCountRedisBolt()).shuffleGrouping("urlspout");
   StormTopology topology = builder.createTopology();
   Config config = new Config();
   config.setNumWorkers(8);
   //集群模式
   StormSubmitter.submitTopology("topwords",config,topology);
}

六、打包


七、上传

八、运行jar

./storm jar /usr/apps/testsource/storm-1.0-SNAPSHOT-jar-with-dependencies.jar  com.simon.storm.URLCountTopology myTest

九、运行成功


十、查看Redis


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Simon_09010817/article/details/79977294

storm-redis 一

因为storm整合redis不止有普通整合还有高级整合,所以分开 pom.xml org.apache.storm storm-core 1.1.1 ...
  • yidan7063
  • yidan7063
  • 2018-01-23 16:59:17
  • 122

在线实时大数据平台Storm集成redis开发(分布锁)

1、需求场景:spout从ftp列表中拿到未读取的文件读取并发射行到Bolt,bolt进行业务处理后提交下一Bolt入库。用redis主要是:保存文件列表对象,使用分布锁来同步互斥访问共享对象,使文件...
  • fjssharpsword
  • fjssharpsword
  • 2016-08-25 13:06:31
  • 3285

springBoot集成Redis源码

  • 2017年11月27日 14:01
  • 60KB
  • 下载

架构之路之spring+redis的集成

1.前言        Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。我们都知道,在日常的应用中,数据库瓶颈...
  • tomcat_2014
  • tomcat_2014
  • 2017-02-16 16:45:10
  • 17045

Spring集成Redis步骤

redis简介redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sort...
  • jrn1012
  • jrn1012
  • 2017-04-22 09:25:13
  • 1426

springBoot集成redis

定义 Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和...
  • Soda_lw
  • Soda_lw
  • 2018-01-05 14:35:09
  • 1267

springmvc集成使用redis

Redis安装 首先安装redis。这个就不重点介绍了。windos下载redis就行。 我用的是mac 用命令行安装的。 安装命令yum install redis 运行命令 sudo r...
  • qq_24046745
  • qq_24046745
  • 2016-09-29 15:24:27
  • 4008

Spring 集成 Redis

1、利用spring-data-redis整合 org.springframework.data spring-data-redis ...
  • LK10207160511
  • LK10207160511
  • 2015-12-20 14:50:44
  • 1242

springboot集成Redis

springboot集成Redis前言Redis是目前使用的非常广泛的内存数据库,相比memcached,它支持更加丰富的数据类型。本来简要介绍在springboot中使用redis的方法。...
  • qincidong
  • qincidong
  • 2017-08-04 16:09:52
  • 5000
收藏助手
不良信息举报
您举报文章:8.2.0Storm集成Redis
举报原因:
原因补充:

(最多只允许输入30个字)