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.