Twitter Storm 序列化
生活随笔
收集整理的這篇文章主要介紹了
Twitter Storm 序列化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
序列化 topology.kryo.register:? ??-?com.mycompany.CustomType1? ??-?com.mycompany.CustomType2:?com.mycompany.serializer.CustomType2Serializer? ??-?com.mycompany.CustomType3? com.mycompany.CustomType1和com.mycompany.CustomType3的序列化使用FieldsSerializer。但com.mycompany.CustomType2的序列化使用com.mycompany.serializer.CustomType2Serializer。 Storm使用拓?fù)渑渲米?cè)序列化裝置提供了幫助。Config類的registerSerialization方法把注冊(cè)的序列化裝置添加到配置。 這里有一個(gè)稱之為Config.TOPOLOGY_SKIP_MISSING_KRYO_REGISTRATIONS的高級(jí)配置。如果你設(shè)置它為真,storm將忽略任何已注冊(cè)的序列化裝置,就算classpath中沒有它們的代碼可用;否則,當(dāng)storm未找到一個(gè)序列化裝置時(shí),將拋出異常。如果你在一個(gè)集群中運(yùn)行多個(gè)拓?fù)?#xff0c;每個(gè)拓?fù)涫褂貌煌男蛄谢绞?#xff0c;但你想在storm.yaml文件中對(duì)這些拓?fù)渎暶鞲髯缘男蛄谢绞?#xff0c;這個(gè)配置就非常有用。 ? Java序列化 如果storm遇到一個(gè)未注冊(cè)序列化裝置的類型,它將使用java序列化。如果對(duì)象不能用java序列化,storm將拋出異常。 注意,Java序列化是非常昂貴的,不管是CPU的花費(fèi),還是被序列化后對(duì)象所占的空間。在生產(chǎn)環(huán)境運(yùn)行拓?fù)?#xff0c;強(qiáng)烈建議你注冊(cè)自定義序列化裝置。 通過設(shè)置Config.TOPOLOGY_FALL_BACK_ON_JAVA_SERIALIZATION為假,你可以關(guān)閉這個(gè)行為,回退到使用java序列化。 ? ? 英文:https://github.com/nathanmarz/storm/wiki/Serialization ?
這篇文章是關(guān)于序列化方法在storm 0.6.0版及之前版本中是如何工作的。0.6.0版之前,storm使用一種不同的序列化方法,參見?Serialization (prior to 0.6.0)。
元組可由任何一種類型的對(duì)象組成。由于storm是一個(gè)分布式系統(tǒng),當(dāng)對(duì)象在任務(wù)之間傳遞時(shí),它需要知道如何序列化和反序列化這些對(duì)象。 Storm使用Kryo進(jìn)行序列化。Kryo是一個(gè)靈活快速的序列化庫(kù),產(chǎn)生小的序列化。 默認(rèn)情況下,storm能序列化原始類型:String、字節(jié)數(shù)組、ArrayList、HashMap、HashSet及Clojure的集合類型。如果你想在元組中使用另外的類型,你需要注冊(cè)一個(gè)自定義序列化裝置。 ? 動(dòng)態(tài)類型 元組中字段沒有聲明類型。你放置對(duì)象到字段中,storm動(dòng)態(tài)地計(jì)算出序列化。我們獲到序列化接口之前,讓我們花點(diǎn)時(shí)間理解為什么storm的元組是動(dòng)態(tài)類型。 如果添加靜態(tài)類型到元組字段將使Storm API非常復(fù)雜。例如,Hadoop,它的key和value是靜態(tài)類型,但需要非常多的注解。使用Hadoop API是一個(gè)負(fù)擔(dān),這樣子做到類型安全是不值得的。動(dòng)態(tài)類型簡(jiǎn)單易用。 此外,不可能用合理的方式靜態(tài)化storm元組的類型。假如一個(gè)bolt訂閱多個(gè)數(shù)據(jù)流,這些數(shù)據(jù)流中的字段可能使用不同的數(shù)據(jù)類型。當(dāng)一個(gè)bolt在execute方法中接收一個(gè)元組后,這個(gè)元組可以來自于任意一個(gè)數(shù)據(jù)流,因此元組的數(shù)據(jù)類型可以是任意數(shù)據(jù)類型的組合。這里也許你可以使用一些反射技巧,為一個(gè)bolt訂閱的不同數(shù)據(jù)流中的元組聲明不同的方法,但storm使用簡(jiǎn)單直接的方式實(shí)現(xiàn)動(dòng)態(tài)類型。 最后,使用動(dòng)態(tài)類型的另一個(gè)原因是因?yàn)樵试S動(dòng)態(tài)類型語言以簡(jiǎn)單的方式使用storm,像Clojure和Ruby。 ? 自定義序列化 如上所述,Storm使用Kryo進(jìn)行序列化。為了實(shí)現(xiàn)自定義序列化,你需要注冊(cè)新的序列化裝置和Kryo,強(qiáng)烈推薦你看看Kryo的主頁(yè),了解它如何處理自定義序列化。 通過拓?fù)渑渲玫摹皌opology.kryo.register”屬性添加自定義序列化。它需要一個(gè)注冊(cè)清單,其中的每個(gè)注冊(cè)都可以采用以下兩種形式之一: 1.?你要注冊(cè)的類名。在這種情況下,storm使用Kryo的“FieldsSerializer”來序列化這個(gè)類。對(duì)這個(gè)類來說,這不一定是最優(yōu)的,更多細(xì)節(jié)參見Kryo文檔。 2.?你要注冊(cè)的類名和一個(gè)com.esotericsoftware.kryo.Serializer接口的實(shí)現(xiàn)。 讓我們看一個(gè)例子:?
轉(zhuǎn)載于:https://blog.51cto.com/chenlx/749165
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Twitter Storm 序列化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到捡零钱了是什么意思
- 下一篇: 2012网页设计趋势(下)