真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

StormDRPC怎么使用

本篇內(nèi)容主要講解“Storm DRPC怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Storm DRPC怎么使用”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、西安網(wǎng)站維護(hù)、網(wǎng)站推廣。

Storm里面引入DRPC主要是利用storm的實(shí)時(shí)計(jì)算能力來并行化CPU密集型(CPU intensive)的計(jì)算任務(wù)。DRPC的stormtopology以函數(shù)的參數(shù)流作為輸入,而把這些函數(shù)調(diào)用的返回值作為topology的輸出流。

DRPC其實(shí)不能算是storm本身的一個(gè)特性, 它是通過組合storm的原語stream、spout、bolt、 topology而成的一種模式(pattern)。本來應(yīng)該把DRPC單獨(dú)打成一個(gè)包的, 但是DRPC實(shí)在是太有用了,所以我們我們把它和storm捆綁在一起。

概覽

Distributed RPC是由一個(gè)”DPRC服務(wù)器”協(xié)調(diào)(storm自帶了一個(gè)實(shí)現(xiàn))。DRPC服務(wù)器協(xié)調(diào):① 接收一個(gè)RPC請(qǐng)求  ② 發(fā)送請(qǐng)求到storm topology  ③ 從storm topology接收結(jié)果  ④ 把結(jié)果發(fā)回給等待的客戶端。從客戶端的角度來看一個(gè)DRPC調(diào)用跟一個(gè)普通的RPC調(diào)用沒有任何區(qū)別。比如下面是客戶端如何調(diào)用RPC計(jì)算“reach”功能(function)的結(jié)果

  

DRPCClient client =  new DRPCClient("drpc-host", 3772);

  

String result =  client.execute("reach", "http://twitter.com");

  

DRPC的工作流大致是這樣的(重要☆):

Storm DRPC怎么使用

客戶端給DRPC服務(wù)器發(fā)送要執(zhí)行的函數(shù)(function)的名字,以及這個(gè)函數(shù)的參數(shù)。實(shí)現(xiàn)了這個(gè)函數(shù)的topology使用DRPCSpout從DRPC服務(wù)器接收函數(shù)調(diào)用流,每個(gè)函數(shù)調(diào)用被DRPC服務(wù)器標(biāo)記了一個(gè)唯一的id。 這個(gè)topology然后計(jì)算結(jié)果,在topology的最后,一個(gè)叫做ReturnResults的bolt會(huì)連接到DRPC服務(wù)器,并且把這個(gè)調(diào)用的結(jié)果發(fā)送給DRPC服務(wù)器(通過那個(gè)唯一的id標(biāo)識(shí))。DRPC服務(wù)器用那個(gè)唯一id來跟等待的客戶端匹配上,喚醒這個(gè)客戶端并且把結(jié)果發(fā)送給它。

LinearDRPCTopologyBuilder

Storm自帶了一個(gè)稱作LinearDRPCTopologyBuilder的topology builder,它把實(shí)現(xiàn)DRPC的幾乎所有步驟都自動(dòng)化了。這些步驟包括:

1、設(shè)置spout

2、把結(jié)果返回給DRPC服務(wù)器

3、給bolt提供有限聚合幾組tuples的能力

來看一個(gè)簡(jiǎn)單的例子,下面是一個(gè)把輸入?yún)?shù)后面添加一個(gè)”!”的DRPC topology的實(shí)現(xiàn):

  

public static class  ExclaimBolt extends BaseBasicBolt {

  

    public void execute(Tuple tuple,  BasicOutputCollector collector) {

  

        String input = tuple.getString(1);

  

        collector.emit(new  Values(tuple.getValue(0), input + "!"));

  

    }

  

    public void  declareOutputFields(OutputFieldsDeclarer declarer) {

  

        declarer.declare(new  Fields("id", "result"));

  

    }

  

}

  

  

public static void  main(String[] args) throws Exception {

  

    LinearDRPCTopologyBuilder builder = new  LinearDRPCTopologyBuilder("exclamation");

  

    builder.addBolt(new ExclaimBolt(), 3);

  

    // ...

  

}

  

可以看出來,我們需要做的事情非常的少。創(chuàng)建LinearDRPCTopologyBuilder的時(shí)候,你需要告訴它你要實(shí)現(xiàn)的DRPC函數(shù)(DRPC function)的名字。一個(gè)DRPC服務(wù)器可以協(xié)調(diào)很多函數(shù),函數(shù)與函數(shù)之間靠函數(shù)名字來區(qū)分。你聲明的第一個(gè)bolt會(huì)接收一個(gè)兩維tuple,tuple的第一個(gè)字段是request-id,第二個(gè)字段是這個(gè)請(qǐng)求的參數(shù)。LinearDRPCTopologyBuilder同時(shí)要求我們topology的最后一個(gè)bolt發(fā)送一個(gè)形如[id, result]的二維tuple:第一個(gè)field是request-id,第二個(gè)field是這個(gè)函數(shù)的結(jié)果。最后所有中間tuple的第一個(gè)field必須是request-id。

在這里例子里面ExclaimBolt 簡(jiǎn)單地在輸入tuple的第二個(gè)field后面再添加一個(gè)”!”,其余的事情都由LinearDRPCTopologyBuilder幫我們搞定:連接到DRPC服務(wù)器,并且把結(jié)果發(fā)回。

本地模式DRPC

DRPC可以以本地模式運(yùn)行,下面就是以本地模式運(yùn)行上面例子的代碼:

  

LocalDRPC drpc = new LocalDRPC();

  

LocalCluster cluster = new  LocalCluster();

  

  

cluster.submitTopology("drpc-demo",  conf, builder.createLocalTopology(drpc));

  

  

System.out.println("Results for  'hello':" + drpc.execute("exclamation", "hello"));

  

  

cluster.shutdown();

  

drpc.shutdown();

  

首先你創(chuàng)建一個(gè)LocalDRPC對(duì)象,這個(gè)對(duì)象在進(jìn)程內(nèi)模擬一個(gè)DRPC服務(wù)器(這很類似于LocalCluster在進(jìn)程內(nèi)模擬一個(gè)Storm集群),然后創(chuàng)建LocalCluster對(duì)象在本地模式運(yùn)行topology。LinearTopologyBuilder有單獨(dú)的方法來創(chuàng)建本地的topology和遠(yuǎn)程的topology。在本地模式里面LocalDRPC對(duì)象不和任何端口綁定,所以我們的topology對(duì)象需要知道和誰交互,這就是為什么createLocalTopology方法接受一個(gè)LocalDRPC對(duì)象作為輸入的原因。

把topology啟動(dòng)了之后,你就可以通過調(diào)用LocalDRPC對(duì)象的execute來調(diào)用RPC方法了。

遠(yuǎn)程模式DRPC

在一個(gè)真實(shí)集群上面DRPC也是非常簡(jiǎn)單的,有三個(gè)步驟:

1、啟動(dòng)DRPC服務(wù)器

2、配置DRPC服務(wù)器的地址

3、提交DRPCtopology到storm集群里面去。

我們可以通過“bin/storm drpc”命令來啟動(dòng)DRPC服務(wù)器。

接著,你需要讓你的storm集群知道你的DRPC服務(wù)器的地址。DRPCSpout需要這個(gè)地址從而可以從DRPC服務(wù)器來接收函數(shù)調(diào)用。這個(gè)可以配置在storm.yaml或者通過代碼的方式配置在topology里面。通過storm.yaml配置是這樣的:

  

drpc.servers:

  

  - "drpc1.foo.com"

  

  - "drpc2.foo.com"

  

最后,你通過StormSubmitter對(duì)象來提交DRPC topology(這個(gè)跟你提交其它topology沒有區(qū)別)。如果要以遠(yuǎn)程的方式運(yùn)行上面的例子,用下面的代碼:

  

StormSubmitter.submitTopology("exclamation-drpc",  conf, builder.createRemoteTopology());

  

我們用createRemoteTopology方法來創(chuàng)建運(yùn)行在真實(shí)集群上的DRPC topology。

到此,相信大家對(duì)“Storm DRPC怎么使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前標(biāo)題:StormDRPC怎么使用
標(biāo)題路徑:http://weahome.cn/article/iepsjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部