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