Avro-overview
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 Buffers 、 Thrift などの他のシリアル化メカニズムがあります。
ThriftおよびProtocolバッファーとの比較
*Thrift* および *Protocol Buffers* は、Avroで最も優れたライブラリです。 Avroは、次の点でこれらのフレームワークとは異なります-
- Avroは、要件に従って動的タイプと静的タイプの両方をサポートしています。 プロトコルバッファとThriftは、インターフェイス定義言語(IDL)を使用してスキーマとそのタイプを指定します。 これらのIDLは、シリアル化および逆シリアル化のためのコードを生成するために使用されます。
- AvroはHadoopエコシステムに組み込まれています。 ThriftおよびProtocol Buffersは、Hadoopエコシステムに組み込まれていません。
ThriftおよびProtocol Bufferとは異なり、Avroのスキーマ定義はJSONであり、独自のIDLではありません。
Property | Avro | Thrift & Protocol Buffer |
---|---|---|
Dynamic schema | Yes | No |
Built into Hadoop | Yes | No |
Schema in JSON | Yes | No |
No need to compile | Yes | No |
No need to declare IDs | Yes | No |
Bleeding edge | Yes | No |
Avroの機能
以下は、Avroの顕著な特徴の一部です-
- Avroは、言語に依存しない*データシリアル化システムです。
- 多くの言語(現在はC、C ++、C#、Java、Python、Ruby)で処理できます。
- Avroは、*圧縮可能*および*分割可能*の両方であるバイナリ構造化形式を作成します。 したがって、Hadoop MapReduceジョブへの入力として効率的に使用できます。
- Avroは、*豊富なデータ構造*を提供します。 たとえば、配列、列挙型、およびサブレコードを含むレコードを作成できます。 これらのデータ型は任意の言語で作成でき、Hadoopで処理でき、結果を第3言語にフィードできます。
- JSON で定義されているAvro schemas は、JSONライブラリをすでに持っている言語での実装を容易にします。
- Avroは、_Avro Data File、_という名前の自己記述型ファイルを作成します。このファイルには、メタデータセクションにスキーマとともにデータが格納されます。
- Avroは、リモートプロシージャコール(RPC)でも使用されます。 RPC中に、クライアントとサーバーは接続ハンドシェイクでスキーマを交換します。
Avroの一般的な作業
Avroを使用するには、所定のワークフローに従う必要があります-
- *ステップ1 *-スキーマを作成します。 ここでは、データに従ってAvroスキーマを設計する必要があります。
- *ステップ2 *-スキーマをプログラムに読み込みます。 それは2つの方法で行われます-
- スキーマに対応するクラスを生成する-Avroを使用してスキーマをコンパイルします。 これにより、スキーマに対応するクラスファイルが生成されます
- パーサーライブラリを使用して-パーサーライブラリを使用してスキーマを直接読み取ることができます。
- *ステップ3 *-*パッケージorg.apache.avro.specific *にあるAvroに提供されているシリアル化APIを使用してデータをシリアル化します。
- ステップ4 *-Avroに提供されているデシリアライゼーションAPIを使用してデータをデシリアライズします。これは package org.apache.avro.specific。*にあります