Apache Avroとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > Apache Avroの意味・解説 

Apache Avro

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/17 08:28 UTC 版)

Apache Avro
開発元 Apache Software Foundation
初版 2009年11月2日 (15年前) (2009-11-02)[1]
最新版
1.11.3 / 2023年9月23日 (17か月前) (2023-09-23)[2]
リポジトリ Avro Repository
プログラミング
言語
JavaCC++C#PerlPythonPHPRuby
種別 Remote procedure callフレームワーク
ライセンス Apache License 2.0
公式サイト avro.apache.org
テンプレートを表示

AvroHadoop Hadoopで開発された行指向のRPCおよびデータシリアライゼーションフレームワークである。JSONを使用してデータ型プロトコルを定義し、データをコンパクトなバイナリフォーマットにシリアル化する。主な用途は、永続化データのシリアル化フォーマット、Hadoopノード間の通信とHadoopサービスのクライアントプログラムのためのワイヤーフォーマット英語版である。Avroはエンコードされるデータを構造化するためのスキーマを使用する。人間が編集するためのスキーマ言語(Avro IDL)とJSONを基にしたより機械可読な英語版スキーマ言語の2種類がある[3]

ThriftProtocol Buffersに似ているが、スキーマが変更された場合でも(静的な型付き言語が必要でない限り)、コード生成プログラムを実行する必要はない。

Apache Spark SQLはデータソースとしてAvroにアクセスできる[4]

Avroのオブジェクトコンテナファイル

Avroのオブジェクトコンテナファイルには次の要素から構成される[5]

ファイルヘッダは次の要素から構成される。

  • 4倍とのASCII文字'O'、'b'、'j'と、それに続くAvroのバージョン番号1(0x01)(バイナリ値は0x4F 0x62 0x6A 0x01)。
  • スキーマ定義を含むファイルメタデータ。
  • ファイルごとにランダム生成された16バイト同期マーカー。

データブロックに対しては、Avroはシリアル化エンコーディングとしてバイナリとJSONの2種類が指定できる[6]。ほとんどのアプリケーションはサイズが小さく高速なため、バイナリエンコーディングを使用している。デバッグとウェブベースのアプリケーションの場合はJSONエンコーディングが適切な場合もある。

スキーマ定義

AvroのスキーマはJSONを使用して定義される。スキーマは、プリミティブ型(null、boolean、int、long、float、double、bytes、string)と複合型(record、enum、array、map、union、fixed)から構成される[7]

単純なスキーマの例:

 {
   "namespace": "example.avro",
   "type": "record",
   "name": "User",
   "fields": [
      {"name": "name", "type": "string"},
      {"name": "favorite_number",  "type": ["null", "int"]},
      {"name": "favorite_color", "type": ["null", "string"]}
   ] 
 }

シリアライズとデシリアライズ

Avroのデータは対応するスキーマとともに保存することもできる。その場合、シリアル化されたデータ事前にスキーマを知らなくても読み込むことが可能である。

シリアライズとデシリアライズを行うPythonコードの例

シリアライズ:[8]

import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

# Need to know the schema to write. According to 1.8.2 of Apache Avro
schema = avro.schema.parse(open("user.avsc", "rb").read())

writer = DataFileWriter(open("users.avro", "wb"), DatumWriter(), schema)
writer.append({"name": "Alyssa", "favorite_number": 256})
writer.append({"name": "Ben", "favorite_number": 8, "favorite_color": "red"})
writer.close()

ファイルusers.avroは、以下のように、JSONのスキーマとデータのコンパクトなバイナリ表現[9]を格納している。

$ od -v -t x1z users.avro 
0000000 4f 62 6a 01 04 14 61 76 72 6f 2e 63 6f 64 65 63  >Obj...avro.codec<
0000020 08 6e 75 6c 6c 16 61 76 72 6f 2e 73 63 68 65 6d  >.null.avro.schem<
0000040 61 ba 03 7b 22 74 79 70 65 22 3a 20 22 72 65 63  >a..{"type": "rec<
0000060 6f 72 64 22 2c 20 22 6e 61 6d 65 22 3a 20 22 55  >ord", "name": "U<
0000100 73 65 72 22 2c 20 22 6e 61 6d 65 73 70 61 63 65  >ser", "namespace<
0000120 22 3a 20 22 65 78 61 6d 70 6c 65 2e 61 76 72 6f  >": "example.avro<
0000140 22 2c 20 22 66 69 65 6c 64 73 22 3a 20 5b 7b 22  >", "fields": [{"<
0000160 74 79 70 65 22 3a 20 22 73 74 72 69 6e 67 22 2c  >type": "string",<
0000200 20 22 6e 61 6d 65 22 3a 20 22 6e 61 6d 65 22 7d  > "name": "name"}<
0000220 2c 20 7b 22 74 79 70 65 22 3a 20 5b 22 69 6e 74  >, {"type": ["int<
0000240 22 2c 20 22 6e 75 6c 6c 22 5d 2c 20 22 6e 61 6d  >", "null"], "nam<
0000260 65 22 3a 20 22 66 61 76 6f 72 69 74 65 5f 6e 75  >e": "favorite_nu<
0000300 6d 62 65 72 22 7d 2c 20 7b 22 74 79 70 65 22 3a  >mber"}, {"type":<
0000320 20 5b 22 73 74 72 69 6e 67 22 2c 20 22 6e 75 6c  > ["string", "nul<
0000340 6c 22 5d 2c 20 22 6e 61 6d 65 22 3a 20 22 66 61  >l"], "name": "fa<
0000360 76 6f 72 69 74 65 5f 63 6f 6c 6f 72 22 7d 5d 7d  >vorite_color"}]}<
0000400 00 05 f9 a3 80 98 47 54 62 bf 68 95 a2 ab 42 ef  >......GTb.h...B.<
0000420 24 04 2c 0c 41 6c 79 73 73 61 00 80 04 02 06 42  >$.,.Alyssa.....B<
0000440 65 6e 00 10 00 06 72 65 64 05 f9 a3 80 98 47 54  >en....red.....GT<
0000460 62 bf 68 95 a2 ab 42 ef 24                       >b.h...B.$<
0000471

デシリアライズ:

# The schema is embedded in the data file
reader = DataFileReader(open("users.avro", "rb"), DatumReader())
for user in reader:
    print(user)
reader.close()

このコードの出力は次のようになる。

{'name': 'Alyssa', 'favorite_number': 256, 'favorite_color': None}
{'name': 'Ben', 'favorite_number': 8, 'favorite_color': 'red'}

APIがあるプログラミング言語

理論的にはどんな言語もAvroを使用できるが、以下の言語にはすでにAPI実装が存在する:[10][11]

Avro IDL

Avroの型とプロトコル定義には、JSONのサポートに加えて、Avro IDL(旧称GenAvro)と呼ばれる実験的な[24]代替のインタフェース記述言語(IDL)構文のサポートも提供されている。このフォーマットは、より伝統的なIDLやプログラミング言語に慣れたユーザーが簡単に適応できるように設計されており、C/C++やProtocol Buffersなどに似た構文を持つ。

ロゴ

オリジナルのApache Avroのロゴは現在は倒産したイギリスの航空機製造会社Avro(元A.V. Roe and Company)に由来している[25]

Apache Avroのロゴは2023年末にオリジナルのデザインに更新された[26]

関連項目

出典

  1. ^ Apache Avro: a New Format for Data Interchange”. blog.cloudera.com. 2019年3月10日閲覧。
  2. ^ Apache Avro Releases”. avro.apache.org. 2023年9月23日閲覧。
  3. ^ Kleppmann, Martin (2017). Designing Data-Intensive Applications (First ed.). O'Reilly. p. 122 
  4. ^ 3 Reasons Why In-Hadoop Analytics are a Big Deal - Dataconomy”. dataconomy.com (2016年4月21日). 2024年9月8日閲覧。
  5. ^ Apache Avro Specification: Object Container Files”. avro.apache.org. 2024年9月8日閲覧。
  6. ^ Apache Avro Specification: Encodings”. avro.apache.org. 2024年9月8日閲覧。
  7. ^ Apache Avro Getting Started (Python)”. avro.apache.org. 2016年6月5日時点のオリジナルよりアーカイブ。2019年3月11日閲覧。
  8. ^ Apache Avro Getting Started (Python)”. avro.apache.org. 2016年6月5日時点のオリジナルよりアーカイブ。2019年3月11日閲覧。
  9. ^ Apache Avro Specification: Data Serialization”. avro.apache.org. 2024年9月8日閲覧。
  10. ^ phunt. “GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop.”. GitHub. 2016年4月13日閲覧。
  11. ^ Supported Languages - Apache Avro - Apache Software Foundation”. 2016年4月21日閲覧。
  12. ^ Avro: 1.5.1 - ASF JIRA”. 2016年4月13日閲覧。
  13. ^ [AVRO-533 .NET implementation of Avro - ASF JIRA]”. 2016年4月13日閲覧。
  14. ^ Supported Languages”. 2016年4月13日閲覧。
  15. ^ AvroEx”. hexdocs.pm. 2017年10月18日閲覧。
  16. ^ Avrora — avrora v0.21.1”. hexdocs.pm. 2021年6月11日閲覧。
  17. ^ avro package - github.com/hamba/avro - Go Packages”. pkg.go.dev. 2023年7月4日閲覧。
  18. ^ goavro, LinkedIn, (2023-06-30), https://github.com/linkedin/goavro 2023年7月4日閲覧。 
  19. ^ Native Haskell implementation of Avro”. Thomas M. DuBuisson, Galois, Inc.. 2016年8月8日閲覧。
  20. ^ Pure JavaScript implementation of the Avro specification.”. GitHub. 2020年5月4日閲覧。
  21. ^ Getting Started (Python)” (英語). Apache Avro. 2023年7月4日閲覧。
  22. ^ Avro, Apache, avro: Avro is a serialization and RPC framework., https://avro.apache.org/ 2023年7月4日閲覧。 
  23. ^ Apache Avro client library implementation in Rust”. 2018年12月17日閲覧。
  24. ^ Apache Avro 1.8.2 IDL”. 2010年9月20日時点のオリジナルよりアーカイブ。2019年3月11日閲覧。
  25. ^ The Avro Logo”. avroheritagemuseum.co.uk. 2018年12月31日閲覧。
  26. ^ [AVRO-3908 Update project logo everywhere - ASF JIRA]”. apache.org. 2024年2月6日閲覧。


参考文献




英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  
  •  Apache Avroのページへのリンク

辞書ショートカット

すべての辞書の索引

「Apache Avro」の関連用語

Apache Avroのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Apache Avroのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのApache Avro (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS