StormDRPC怎么使用

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

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

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

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

概覽

Distributed RPC是由一個”DPRC服務(wù)器”協(xié)調(diào)(storm自帶了一個實現(xiàn))。DRPC服務(wù)器協(xié)調(diào):① 接收一個RPC請求  ② 發(fā)送請求到storm topology  ③ 從storm topology接收結(jié)果  ④ 把結(jié)果發(fā)回給等待的客戶端。從客戶端的角度來看一個DRPC調(diào)用跟一個普通的RPC調(diào)用沒有任何區(qū)別。比如下面是客戶端如何調(diào)用RPC計算“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)的名字,以及這個函數(shù)的參數(shù)。實現(xiàn)了這個函數(shù)的topology使用DRPCSpout從DRPC服務(wù)器接收函數(shù)調(diào)用流,每個函數(shù)調(diào)用被DRPC服務(wù)器標(biāo)記了一個唯一的id。 這個topology然后計算結(jié)果,在topology的最后,一個叫做ReturnResults的bolt會連接到DRPC服務(wù)器,并且把這個調(diào)用的結(jié)果發(fā)送給DRPC服務(wù)器(通過那個唯一的id標(biāo)識)。DRPC服務(wù)器用那個唯一id來跟等待的客戶端匹配上,喚醒這個客戶端并且把結(jié)果發(fā)送給它。

LinearDRPCTopologyBuilder

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

1、設(shè)置spout

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

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

來看一個簡單的例子,下面是一個把輸入?yún)?shù)后面添加一個”!”的DRPC topology的實現(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的時候,你需要告訴它你要實現(xiàn)的DRPC函數(shù)(DRPC function)的名字。一個DRPC服務(wù)器可以協(xié)調(diào)很多函數(shù),函數(shù)與函數(shù)之間靠函數(shù)名字來區(qū)分。你聲明的第一個bolt會接收一個兩維tuple,tuple的第一個字段是request-id,第二個字段是這個請求的參數(shù)。LinearDRPCTopologyBuilder同時要求我們topology的最后一個bolt發(fā)送一個形如[id, result]的二維tuple:第一個field是request-id,第二個field是這個函數(shù)的結(jié)果。最后所有中間tuple的第一個field必須是request-id。

在這里例子里面ExclaimBolt 簡單地在輸入tuple的第二個field后面再添加一個”!”,其余的事情都由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)建一個LocalDRPC對象,這個對象在進(jìn)程內(nèi)模擬一個DRPC服務(wù)器(這很類似于LocalCluster在進(jìn)程內(nèi)模擬一個Storm集群),然后創(chuàng)建LocalCluster對象在本地模式運(yùn)行topology。LinearTopologyBuilder有單獨的方法來創(chuàng)建本地的topology和遠(yuǎn)程的topology。在本地模式里面LocalDRPC對象不和任何端口綁定,所以我們的topology對象需要知道和誰交互,這就是為什么createLocalTopology方法接受一個LocalDRPC對象作為輸入的原因。

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

遠(yuǎn)程模式DRPC

在一個真實集群上面DRPC也是非常簡單的,有三個步驟:

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

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

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

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

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

  

drpc.servers:

  

  - "drpc1.foo.com"

  

  - "drpc2.foo.com"

  

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

  

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

  

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

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

新聞標(biāo)題:StormDRPC怎么使用
當(dāng)前鏈接:http://muchs.cn/article26/iepsjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、動態(tài)網(wǎng)站網(wǎng)頁設(shè)計公司、網(wǎng)站維護(hù)、云服務(wù)器網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)