Avro-overview

提供:Dev Guides
移動先:案内検索

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バッファーとの比較

*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。*にあります