大数据(067)Storm【Storm DRPC】

一、什么是DRPC

        RPC (Remote Procedure Call Protocol)——远程过程调用协议

        RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

        Distributed RPC ——分布式远程过程调用协议

        DRPC就是分布式RPC,Storm是一个分布式实时流处理框架,因此我们称它是建立在Strom之上并行计算的RPC架构。Storm DRPC就是客户端发送请求,发送给Strom Topology,经过Storm处理后将客户端所请求的结果返回给客户端,这里我们可以理解为一般的RPC调用。

        Storm里面引入DRPC主要是利用 Storm的实时计算能力来并行化CPU密集型( CPU Intensive)的计算任务。DRPC的 Storm Topology以函数的参数流作为输入,而把这些函数调用的返回值作为 Topology的输出流。

        DRPC服务器协调:

                ① 接收一个RPC请求

                ② 发送请求到storm topology

                ③ 从storm topology接收结果

                ④ 把结果发回给等待的客户端

        DRPC把大量请求分布式的去做,一次请求如果串行的话可能会比较慢,我并行的来处理,另一方面通过来降低平均一次请求的时间,解决了响应的吞吐,如下图所示:

 二、DRPC示例(本地模式)

         代码如下:

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package storm.starter;

import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.drpc.DRPCSpout;
import backtype.storm.drpc.ReturnResults;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;


public class ManualDRPC {
  public static class ExclamationBolt extends BaseBasicBolt {

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
      declarer.declare(new Fields("result", "return-info"));
    }

    @Override
    public void execute(Tuple tuple, BasicOutputCollector collector) {
      String arg = tuple.getString(0);
      Object retInfo = tuple.getValue(1);
      collector.emit(new Values(arg + "!!!", retInfo));
    }

  }

  public static void main(String[] args) {
    TopologyBuilder builder = new TopologyBuilder();
    LocalDRPC drpc = new LocalDRPC();

    DRPCSpout spout = new DRPCSpout("exclamation", drpc);
    builder.setSpout("drpc", spout);
    builder.setBolt("exclaim", new ExclamationBolt(), 3).shuffleGrouping("drpc");
    builder.setBolt("return", new ReturnResults(), 3).shuffleGrouping("exclaim");

    LocalCluster cluster = new LocalCluster();
    Config conf = new Config();
    cluster.submitTopology("exclaim", conf, builder.createTopology());

    System.out.println(drpc.execute("exclamation", "aaa"));
    System.out.println(drpc.execute("exclamation", "bbb"));

  }
}

        执行结果如下:

三、DRPC示例(集群模式) 

1、修改每台服务器上的配置文件/home/apache-storm-0.9.4/conf/storm.yaml

 

2、启动DRPC服务

        在每台服务器上执行如下命令

cd /home/apache-storm-0.9.4
./bin/storm drpc >> ./logs/drpc.out 2>&1 &

        等待DRPC启动成功之后再执行如下命令

bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar  storm.starter.BasicDRPCTopology basicDRPC

        出现下图所示代表提交成功

        查看UI界面,发现任务已经上去了。

 

        在执行main方法,调用DRPC获取结果,代码如下:

import backtype.storm.utils.DRPCClient;

/**
 * Created by ZhangJintao on 2020/3/5.
 */
public class Test {
    public static void main(String[] args) {
        DRPCClient drpcClient = new DRPCClient("node1", 3772);
        try {
            String result = drpcClient.execute("exclamation", "abcd");
            System.out.printf("result = " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

        执行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值