AVRO-概要

ネットワーク経由またはその永続ストレージ用にデータを転送するには、データをシリアル化する必要があります。前にserialization APIs JavaとHadoopによって提供される、と呼ばれる特別なユーティリティがあります Avro、スキーマベースのシリアル化手法。

このチュートリアルでは、Avroを使用してデータをシリアル化および逆シリアル化する方法を説明します。Avroは、さまざまなプログラミング言語用のライブラリを提供しています。このチュートリアルでは、Javaライブラリを使用した例を示します。

Avroとは何ですか?

Apache Avroは、言語に依存しないデータシリアル化システムです。これは、Hadoopの父であるDougCuttingによって開発されました。Hadoopの書き込み可能なクラスには言語の移植性がないため、Avroは複数の言語で処理できるデータ形式を処理するため、非常に役立ちます。Avroは、Hadoopでデータをシリアル化するための推奨ツールです。

Avroにはスキーマベースのシステムがあります。言語に依存しないスキーマは、その読み取りおよび書き込み操作に関連付けられています。Avroは、スキーマが組み込まれているデータをシリアル化します。Avroは、データをコンパクトなバイナリ形式にシリアル化します。これは、任意のアプリケーションで逆シリアル化できます。

AvroはJSON形式を使用してデータ構造を宣言します。現在、Java、C、C ++、C#、Python、Rubyなどの言語をサポートしています。

Avroスキーマ

Avroはそのに大きく依存しています schema。これにより、スキーマに関する事前の知識がなくても、すべてのデータを書き込むことができます。高速にシリアル化され、結果としてシリアル化されたデータのサイズは小さくなります。スキーマは、Avroデータと一緒にファイルに保存され、さらに処理されます。

RPCでは、クライアントとサーバーは接続中にスキーマを交換します。この交換は、同じ名前のフィールド、欠落しているフィールド、追加のフィールドなどの間の通信に役立ちます。

AvroスキーマはJSONで定義されており、JSONライブラリを使用する言語での実装を簡素化します。

Avroと同様に、Hadoopには他にも次のようなシリアル化メカニズムがあります。 Sequence Files, Protocol Buffers, そして Thrift

ThriftおよびProtocolBuffersとの比較

Thrift そして Protocol BuffersAvroで最も有能なライブラリです。Avroは、次の点でこれらのフレームワークと異なります。

  • Avroは、要件に応じて動的タイプと静的タイプの両方をサポートします。Protocol BuffersとThriftは、インターフェイス定義言語(IDL)を使用してスキーマとそのタイプを指定します。これらのIDLは、シリアル化および逆シリアル化のコードを生成するために使用されます。

  • AvroはHadoopエコシステムに組み込まれています。ThriftおよびProtocolBuffersはHadoopエコシステムに組み込まれていません。

ThriftやProtocolBufferとは異なり、Avroのスキーマ定義はJSONであり、独自のIDLではありません。

プロパティ アブロ Thrift&Protocol Buffer
動的スキーマ はい 番号
Hadoopに組み込まれています はい 番号
JSONのスキーマ はい 番号
コンパイルする必要はありません はい 番号
IDを宣言する必要はありません はい 番号
ブリーディングエッジ はい 番号

Avroの機能

以下にリストされているのは、Avroの主な機能の一部です。

  • アブロは language-neutral データシリアル化システム。

  • 多くの言語(現在はC、C ++、C#、Java、Python、Ruby)で処理できます。

  • Avroは、両方のバイナリ構造化フォーマットを作成します compressible そして splittable。したがって、HadoopMapReduceジョブへの入力として効率的に使用できます。

  • Avroは提供します rich data structures。たとえば、配列、列挙型、およびサブレコードを含むレコードを作成できます。これらのデータ型は任意の言語で作成でき、Hadoopで処理でき、結果を第3言語に送ることができます。

  • アブロ schemas で定義 JSON、JSONライブラリがすでにある言語での実装を容易にします。

  • Avroは、Avro Data Fileという名前の自己記述型ファイルを作成します。このファイルには、データがスキーマとともにメタデータセクションに格納されます。

  • Avroは、リモートプロシージャコール(RPC)でも使用されます。RPC中に、クライアントとサーバーは接続ハンドシェイクでスキーマを交換します。

Avroの一般的な作業

Avroを使用するには、指定されたワークフローに従う必要があります-

  • Step 1−スキーマを作成します。ここでは、データに従ってAvroスキーマを設計する必要があります。

  • Step 2−スキーマをプログラムに読み込みます。それは2つの方法で行われます-

    • By Generating a Class Corresponding to Schema−Avroを使用してスキーマをコンパイルします。これにより、スキーマに対応するクラスファイルが生成されます

    • By Using Parsers Library −パーサーライブラリを使用してスキーマを直接読み取ることができます。

  • Step 3 −Avro用に提供されているシリアル化APIを使用してデータをシリアル化します。 package org.apache.avro.specific

  • Step 4 −Avro用に提供されているデシリアライズAPIを使用してデータをデシリアライズします。 package org.apache.avro.specific.