Avro概述



為了透過網路傳輸資料或將其持久儲存,您需要序列化資料。在Java和Hadoop提供的序列化API之前,我們有一個特殊的實用程式,稱為Avro,這是一種基於模式的序列化技術。

本教程將教您如何使用Avro序列化和反序列化資料。Avro為各種程式語言提供庫。在本教程中,我們將使用Java庫演示示例。

什麼是Avro?

Apache Avro是一個與語言無關的資料序列化系統。它由Hadoop之父Doug Cutting開發。由於Hadoop的可寫類缺乏語言可移植性,Avro變得非常有用,因為它處理可以被多種語言處理的資料格式。Avro是Hadoop中序列化資料的首選工具。

Avro具有基於模式的系統。與它的讀寫操作關聯的是一個與語言無關的模式。Avro序列化具有內建模式的資料。Avro將資料序列化為緊湊的二進位制格式,任何應用程式都可以對其進行反序列化。

Avro使用JSON格式宣告資料結構。目前,它支援Java、C、C++、C#、Python和Ruby等語言。

Avro模式

Avro嚴重依賴其模式。它允許在沒有預先了解模式的情況下寫入任何資料。它序列化速度快,生成的序列化資料大小較小。模式與Avro資料一起儲存在一個檔案中,以便進一步處理。

在RPC中,客戶端和伺服器在連線過程中交換模式。這種交換有助於相同名稱的欄位、缺失的欄位、額外的欄位等之間的通訊。

Avro模式使用JSON定義,簡化了在具有JSON庫的語言中的實現。

與Avro類似,Hadoop中還有其他序列化機制,例如Sequence Files、Protocol BuffersThrift

與Thrift和Protocol Buffers的比較

ThriftProtocol Buffers是與Avro最具競爭力的庫。Avro與這些框架的不同之處在於:

  • Avro根據需要支援動態型別和靜態型別。Protocol Buffers和Thrift使用介面定義語言(IDL)來指定模式及其型別。這些IDL用於生成用於序列化和反序列化的程式碼。

  • Avro內置於Hadoop生態系統中。Thrift和Protocol Buffers並非內置於Hadoop生態系統中。

與Thrift和Protocol Buffer不同,Avro的模式定義使用JSON,而不是任何專有的IDL。

屬性 Avro Thrift & Protocol Buffer
動態模式
內置於Hadoop
JSON模式
無需編譯
無需宣告ID
前沿技術

Avro的功能

以下是Avro的一些突出功能:

  • Avro是一個與語言無關的資料序列化系統。

  • 它可以被多種語言處理(目前為C、C++、C#、Java、Python和Ruby)。

  • Avro建立二進位制結構化格式,既可壓縮可分割。因此,它可以有效地用作Hadoop MapReduce作業的輸入。

  • Avro提供豐富的資料結構。例如,您可以建立一個包含陣列、列舉型別和子記錄的記錄。這些資料型別可以在任何語言中建立,可以在Hadoop中處理,結果可以饋送到第三種語言。

  • Avro模式使用JSON定義,方便在已具有JSON庫的語言中實現。

  • Avro建立一個名為Avro資料檔案的自描述檔案,其中它將資料及其模式儲存在元資料部分。

  • Avro也用於遠端過程呼叫(RPC)。在RPC期間,客戶端和伺服器在連線握手過程中交換模式。

Avro的一般工作原理

要使用Avro,您需要遵循以下工作流程:

  • 步驟1 - 建立模式。在這裡,您需要根據您的資料設計Avro模式。

  • 步驟2 - 將模式讀入您的程式。這可以透過兩種方式完成:

    • 透過生成與模式對應的類 - 使用Avro編譯模式。這將生成與模式對應的類檔案

    • 透過使用解析器庫 - 您可以使用解析器庫直接讀取模式。

  • 步驟3 - 使用Avro提供的序列化API進行資料序列化,該API位於org.apache.avro.specific包中。

  • 步驟4 - 使用Avro提供的反序列化API進行資料反序列化,該API位於org.apache.avro.specific包中。

廣告