您好,登錄后才能下訂單哦!
小編給大家分享一下storm中tuple結(jié)構(gòu)是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
storm使用tuple來(lái)作為它的數(shù)據(jù)模型。每個(gè)tuple是一堆值,每個(gè)值有一個(gè)名字,并且每個(gè)值可以是任何類型, 在我的理解里面一個(gè)tuple可以看作一個(gè)沒(méi)有方法的java對(duì)象。總體來(lái)看,storm支持所有的基本類型、字符串以及字節(jié)數(shù)組作為tuple的值類型。你也可以使用你自己定義的類型來(lái)作為值類型, 只要你實(shí)現(xiàn)對(duì)應(yīng)的序列化器(serializer)。
一個(gè)Tuple代表數(shù)據(jù)流中的一個(gè)基本的處理單元,例如一條cookie日志,它可以包含多個(gè)Field,每個(gè)Field表示一個(gè)屬性。
Tuple本來(lái)應(yīng)該是一個(gè)Key-Value的Map,由于各個(gè)組件間傳遞的tuple的字段名稱已經(jīng)事先定義好了,所以Tuple只需要按序填入各個(gè)Value,所以就是一個(gè)Value List。
一個(gè)沒(méi)有邊界的、源源不斷的、連續(xù)的Tuple序列就組成了Stream。
topology里面的每個(gè)節(jié)點(diǎn)必須定義它要發(fā)射的tuple的每個(gè)字段。 比如下面這個(gè)bolt定義它所發(fā)射的tuple包含兩個(gè)字段,類型分別是: double和triple。
public class DoubleAndTripleBolt implements IRichBolt {
private OutputCollector _collector;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
}
@Override
public voide xecute(Tuple input) {
int val = input.getInteger(0);
_collector.emit(input,new Values(val*2, val*3));
_collector.ack(input);
}
@Override
public void cleanup() {
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(newFields("double","triple"));
}
}
declareOutputFields方法定義要輸出的字段 : ["double", "triple"]。
以上是“storm中tuple結(jié)構(gòu)是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。