Avro-serialization-by-generating-class
AVRO-生成クラスによるシリアル化
スキーマに対応するクラスを生成するか、パーサーライブラリを使用して、Avroスキーマをプログラムに読み込むことができます。 この章では、クラスを生成してスキーマを読み取る方法と、Avrを使用してデータを*シリアル化*する方法について説明します。
クラスの生成によるシリアル化
Avroを使用してデータをシリアル化するには、以下の手順に従ってください-
- Avroスキーマを記述します。
- Avroユーティリティを使用してスキーマをコンパイルします。 あなたはそれに対応するJavaコードを取得します スキーマ
- スキーマにデータを入力します。
- Avroライブラリを使用してシリアル化します。
スキーマの定義
あなたは次の詳細を持つスキーマが必要だと仮定します-
Field | Name | id | age | salary | address |
type | String | int | int | int | string |
以下に示すようにAvroスキーマを作成します。
スキーマのコンパイル
Avroスキーマを作成したら、Avroツールを使用して作成したスキーマをコンパイルする必要があります。 avro-tools-1.7.7.jar は、ツールを含むjarです。
Avroスキーマをコンパイルする構文
ホームフォルダーでターミナルを開きます。
以下に示すように、Avroで動作する新しいディレクトリを作成します-
新しく作成されたディレクトリで、3つのサブディレクトリを作成します-
- 最初に* schema、*という名前を付けて、スキーマを配置します。
- 生成されたコードを配置するための* with_code_gen、*という名前。
- 3番目の名前は jars で、jarファイルを配置します。
次のスクリーンショットは、すべてのディレクトリを作成した後の Avro_work フォルダーの外観を示しています。
- ここで、 /home/Hadoop/Avro_work/jars/avro-tools-1.7.7.jar は、avro-tools-1.7.7.jarファイルをダウンロードしたディレクトリのパスです。
- /home/Hadoop/Avro_work/schema/ は、スキーマファイルemp.avscが保存されているディレクトリのパスです。
- /home/Hadoop/Avro_work/with_code_gen は、生成されたクラスファイルを保存するディレクトリです。
次に、以下に示すようにスキーマをコンパイルします-
コンパイル後、スキーマの名前空間に応じたパッケージが宛先ディレクトリに作成されます。 このパッケージ内で、スキーマ名を持つJavaソースコードが作成されます。 この生成されたソースコードは、アプリケーションで直接使用できる特定のスキーマのJavaコードです。
たとえば、このインスタンスでは、 finddevguides という名前のパッケージ/フォルダーが作成され、comという名前の別のフォルダーが含まれます(名前空間はfinddevguides.comであるため)、その中に生成されたファイル emp.java を確認できます。 次のスナップショットは emp.java を示しています-
このクラスは、スキーマに従ってデータを作成するのに役立ちます。
生成されたクラスが含まれています-
- デフォルトのコンストラクター、およびスキーマのすべての変数を受け入れるパラメーター化されたコンストラクター。
- スキーマ内のすべての変数の設定メソッドと取得メソッド。
- スキーマを返すGet()メソッド。
- ビルダーメソッド。
データの作成とシリアル化
まず、このプロジェクトで使用される生成されたJavaファイルを現在のディレクトリにコピーするか、それが置かれている場所からインポートします。
これで、新しいJavaファイルを作成し、生成されたファイル( emp )でクラスをインスタンス化して、従業員データをスキーマに追加できます。
Apache Avroを使用してスキーマに従ってデータを作成する手順を見てみましょう。
ステップ1
生成された emp クラスをインスタンス化します。
ステップ2
セッターメソッドを使用して、最初の従業員のデータを挿入します。 たとえば、Omarという名前の従業員の詳細を作成しました。
同様に、セッターメソッドを使用してすべての従業員の詳細を入力します。
ステップ3
ステップ4
ステップ5
- create()*メソッドを使用して、指定されたスキーマに一致するデータを保存する新しいファイルを開きます。 このメソッドには、スキーマと、データが保存されるファイルのパスがパラメーターとして必要です。
次の例では、スキーマは* getSchema()メソッドを使用して渡され、データファイルはパスに保存されます-/home/Hadoop/Avro/serialized_file/emp.avro。*
ステップ6
以下に示すように* append()*メソッドを使用して、作成されたすべてのレコードをファイルに追加します-
例–クラスを生成することによるシリアル化
次の完全なプログラムは、Apache Avroを使用してデータをファイルにシリアル化する方法を示しています-
生成されたコードが配置されているディレクトリを参照します。 この場合、 home/Hadoop/Avro_work/with_code_gen にあります。
ターミナル内-
- GUIで-*
上記のプログラムをコピーして、 Serialize.java という名前のファイルに保存します
次のようにコンパイルして実行します-
出力
プログラムで指定されたパスを確認すると、以下に示すように、生成されたシリアル化されたファイルを見つけることができます。