아파치 아브로

위키百科, 우리 모두의 百科事典.

아파치 아브로
開發者 아파치 소프트웨어 財團
發表日 2009年 11月 2日 (14年 前) ( 2009-11-02 ) [1]
安定化 버전
1.11.3 / 2023年 9月 23日 (8個月 前) ( 2023-09-23 ) [2]
貯藏所
種類 遠隔 프로시저 呼出 프레임워크
라이선스 아파치 라이선스 2.0
狀態 開發 中
웹사이트 avro .apache .org

아브로 (Avro)는 아파치의 하둡 프로젝트에서 開發된 遠隔 프로시저 呼出 (RPC) 및 데이터 直列火 프레임워크이다. 資料型과 프로토콜 正義를 위해 JSON 을 使用하며 콤팩트 바이너里 포맷으로 데이터를 直列化한다. 主 用途는 아파치 하둡 에서 클라이언트→하둡 서비스 에 對해 永久 데이터를 위한 直列火 포맷과 하둡 노드 間 通信을 위한 와이어 포맷을 둘 다 提供하는 것이다.

스리프트 프로토콜 버퍼 와 비슷하지만 스키마 變更이 發生할 때( 政敵 資料型 言語를 위해 要求되지 않을 境遇) 코드 生成 프로그램의 實行을 要求하지 않는다.

아파치 스파크 SQL 은 데이터 소스로서 아브로에 接近할 수 있다. [3]

아브로 오브젝트 컨테이너 파일 [ 編輯 ]

아브로 오브젝트 컨테이너 파일 [4] 은 다음으로 構成된다:

  • 파일 헤더
  • (파일 헤더에 이어서) 하나 以上의 파일 데이터 블록

파일 헤더는 다음으로 構成된다:

  • 4바이트, ASCII 'O', 'b', 'j', 그리고 1.
  • 파일 메타데이터 (스키마 正義 包含)
  • 16바이트, 이 파일을 위해 任意 生成된 同期化 마커.

데이터 블록의 境遇 아브로는 2個의 直列火 인코딩을 規定한다: [5] 바이너里, JSON. 大部分의 應用 프로그램들은 크기가 더 작고 더 빠르다는 理由로 李瑱 인코딩을 使用한다. 디버깅 및 웹 基盤 애플리케이션의 境遇 JSON 인코딩이 適切할 수 있다.

스키마 正義 [ 編輯 ]

아브로 스키마는 JSON을 使用하여 定義된다. [6] 스키마는 遠視 資料型(null, boolean, int, long, float, double, bytes, string)과 複素數 資料型(record, enum, array, map, union, and fixed)으로 構成된다.

單純 스키마 예제:

 {

   "namespace"
:
 "example.avro"
,

   "type"
:
 "record"
,

   "name"
:
 "User"
,

   "fields"
:
 [

      {
"name"
:
 "name"
,
 "type"
:
 "string"
},

      {
"name"
:
 "favorite_number"
,
  "type"
:
 [
"int"
,
 "null"
]},

      {
"name"
:
 "favorite_color"
,
 "type"
:
 [
"string"
,
 "null"
]}

   ]

 }

直列化와 役職劣化 [ 編輯 ]

아브로의 데이터는 相應하는 스키마와 함께 貯藏할 수 있으며, 卽 미리 스키마를 알지 않고도 直列化된 項目을 읽을 수 있다는 이야기가 된다.

파이썬의 直列火, 役職劣化 코드 예제 [ 編輯 ]

예제는 다음과 같다. [7]

直列火:

import
 avro.schema

from
 avro.datafile
 import
 DataFileReader
,
 DataFileWriter

from
 avro.io
 import
 DatumReader
,
 DatumWriter


schema
 =
 avro
.
schema
.
parse
(
open
(
"user.avsc"
)
.
read
())
  # need to know the schema to write


writer
 =
 DataFileWriter
(
open
(
"users.avro"
,
 "w"
),
 DatumWriter
(),
 schema
)

writer
.
append
({
"name"
:
 "Alyssa"
,
 "favorite_number"
:
 256
})

writer
.
append
({
"name"
:
 "Ben"
,
 "favorite_number"
:
 7
,
 "favorite_color"
:
 "red"
})

writer
.
close
()

"users.avro" 파일은 JSON 및 콤팩트 바이너里 表現 데이터의 스키마를 包含할 것이다 [8] :

$ 
od
 -c
 users.avro
0000000    O   b   j 001 004 026   a   v   r   o   .   s   c   h   e   m

0000020    a 272 003   {   "   t   y   p   e   "   :       "   r   e   c

0000040    o   r   d   "   ,       "   n   a   m   e   s   p   a   c   e

0000060    "   :       "   e   x   a   m   p   l   e   .   a   v   r   o

0000100    "   ,       "   n   a   m   e   "   :       "   U   s   e   r

0000120    "   ,       "   f   i   e   l   d   s   "   :       [   {   "

0000140    t   y   p   e   "   :       "   s   t   r   i   n   g   "   ,

0000160        "   n   a   m   e   "   :       "   n   a   m   e   "   }

0000200    ,       {   "   t   y   p   e   "   :       [   "   i   n   t

0000220    "   ,       "   n   u   l   l   "   ]   ,       "   n   a   m

0000240    e   "   :       "   f   a   v   o   r   i   t   e   _   n   u

0000260    m   b   e   r   "   }   ,       {   "   t   y   p   e   "   :

0000300        [   "   s   t   r   i   n   g   "   ,       "   n   u   l

0000320    l   "   ]   ,       "   n   a   m   e   "   :       "   f   a

0000340    v   o   r   i   t   e   _   c   o   l   o   r   "   }   ]   }

0000360  024   a   v   r   o   .   c   o   d   e   c  \b   n   u   l   l

0000400   \0 211 266   / 030 334   ?  **   P 314 341 267 234 310   5 213

0000420    6 004   ,  \f   A   l   y   s   s   a  \0 200 004 002 006   B

0000440    e   n  \0 016  \0 006   r   e   d 211 266   / 030 334   ?  **

0000460    P 314 341 267 234 310   5 213   6

0000471

役職劣化:

reader
 =
 DataFileReader
(
open
(
"users.avro"
,
 "r"
),
 DatumReader
())
  # no need to know the schema to read

for
 user
 in
 reader
:

    print
 user

reader
.
close
()

위의 出力은 다음과 같다:

{
u
'favorite_color'
:
 None
,
 u
'favorite_number'
:
 256
,
 u
'name'
:
 u
'Alyssa'
}

{
u
'favorite_color'
:
 u
'red'
,
 u
'favorite_number'
:
 7
,
 u
'name'
:
 u
'Ben'
}

API 使用 言語 [ 編輯 ]

理論的으로 모든 言語가 아브로를 使用할 수 있으나 다음의 言語가 API를 갖추고 있다: [9] [10]

아브로 IDL [ 編輯 ]

資料型 및 프로토콜 正義를 위해 JSON을 支援하는 것 外에도 아브로는 아브로 IDL(Avro IDL)이라는 이름의 인터페이스 정의 言語 (IDL) 文法의 實驗的인 [15] 支援을 包含하고 있다. 過去에는 GenAvro라는 이름이었던 이 포맷은 C/C++, 프로토콜 버퍼 等과 비슷한 文法을 갖춘 더 傳統的인 IDL, 프로그래밍 言語에 親熟한 使用者들에 依해 쉽게 採用되도록 設計되어 있다.

같이 보기 [ 編輯 ]

各州 [ 編輯 ]

  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. “3 Reasons Why In-Hadoop Analytics are a Big Deal - Dataconomy” . 《dataconomy.com》. 2016年 4月 21日.  
  4. “Apache Avro™ Specification: Object Container Files” . 《avro.apache.org》 . 2016年 9月 27日에 確認함 .  
  5. “Apache Avro™ Specification: Encodings” . 《avro.apache.org》 . 2016年 9月 27日에 確認함 .  
  6. “Apache Avro™ Getting Started (Python)” . 《avro.apache.org》. 2016年 6月 5日에 原本 文書 에서 保存된 文書 . 2016年 6月 16日에 確認함 .  
  7. “Apache Avro™ Getting Started (Python)” . 《avro.apache.org》. 2016年 6月 5日에 原本 文書 에서 保存된 文書 . 2016年 6月 16日에 確認함 .  
  8. “Apache Avro™ Specification: Data Serialization” . 《avro.apache.org》 . 2016年 6月 16日에 確認함 .  
  9. phunt. “GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop.” . 《GitHub》 . 2016年 4月 13日에 確認함 .  
  10. “Supported Languages - Apache Avro - Apache Software Foundation” . 2016年 4月 21日에 確認함 .  
  11. “Avro: 1.5.1 - ASF JIRA” . 2016年 4月 13日에 確認함 .  
  12. “[AVRO-533] .NET implementation of Avro - ASF JIRA” . 2016年 4月 13日에 確認함 .  
  13. “Supported Languages” . 2016年 4月 13日에 確認함 .  
  14. “Native Haskell implementation of Avro” . Thomas M. DuBuisson, Galois, Inc . 2016年 8月 8日에 確認함 .  
  15. “Apache Avro 1.8.0 IDL” . 2010年 9月 20日에 原本 文書 에서 保存된 文書 . 2016年 4月 13日에 確認함 .  

追加 文獻 [ 編輯 ]