Hadoop record I/O 包含class文件以及record描述語言解釋器用于簡化records的序列化和反序列化。
介紹
任何顯著復雜性的軟件系統(tǒng)都需要與外界進行數據交換的機制。數據交互通常涉及到輸入輸出數據邏輯單元的封包和解包(如文件、網絡連接、內存緩沖區(qū)等等。)。應用程序通常嵌套了操作代碼用于序列化和反序列化數據類型。序列化的工作有幾個特性,它可以使得代碼自動化生成。給你一個特別的輸出編碼格式(比如二進制、XML等等),基本數據類型以及由基本數據類型構成的組合的序列化將是一個機械化的工作。人工編寫序列化代碼容易造成bugs特別是當records有很多字段或者一個record在不同版本之間定義的不同。最后它在通過不同編程語言編寫的應用程序之間進行數據的交互是很有用的。通過以一種語言無關的方式來描述由應用程序操作的數據records,并使用描述來派生出不同目標語言的實現,會變得更加容易。本文檔描述Hadoop Record I/O,一種機制目的在于:
1)提供簡單的序列化數據類型的規(guī)范
2)提供上述類型的封裝和解包的不同目標語言的代碼生成
3)提供特定于目標預研的支持,使應用程序編程人員能夠將生成的代碼集成到應用程序中。
Hadoop Record I/O的目標有點類型XDR, ASN.1, PADS and ICE的機制。雖然這些系統(tǒng)都包含一個大多數record類型的規(guī)范DDL文件,他們在其他方面還是有很多不同的。Hadoop Record I/O聚焦于數據的序列化和多語言的支持。我們可以基于翻譯器的方式進行序列化。Hadoop的用戶必須使用一個簡單的數據描述語言來描述他們的數據。Hadoop DDL 翻譯器rcc生成代碼,用戶可以通過調用簡單的讀寫數據流抽象來進行數據的讀寫。接下來我們我們會羅列Hadoop Record I/O的一些目標和非目標。
目標:
1)支持常用的基本類型。Hadoop應該包含我們希望支持的常用內置類型。
2)支持復合類型(包括遞歸復合)。Hadoop應該支持復合類型如structs或者vectors。
3)不同目標語言的代碼生成。Hadoop應該能支持生成不同目標語言的序列化代碼,同時能很好地進行擴展。初步目標是C++和JAVA。
4)目標語言的支持。Hadoop應該內置支持目標的頭文件、庫或者包,以便能很好地內置到應用程序當中。
5)支持多種不同輸出編碼格式??梢允欠庋b好的二進制、逗號分隔的文本或者是XML等等。
6)支持向后或向前兼容的記錄類型。
非目標:
1)序列化任意的C++文件。
2)序列化復雜的數據結構如trees、linked list等等。
3)內建的索引、壓縮或校驗和。
4)從XML生成的動態(tài)構造實體。
后續(xù)的文檔主要在細節(jié)上描述Hadoop record I/O 的特性。第2部分描述系統(tǒng)支持的數據類型,第3部分描述簡單記錄例子的DDL語法,第4部分描述使用rcc代碼生成的過程,第5部分描述目標語言的映射和對Hadoop類型的支持,我們已經有一個C++映射的相對完整的描述,在即將到來的文檔更新中將會包含Java以及其他語言。最后一部分描述輸出編碼的支持。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26