아파치 에이브로

Apache Avro
아파치 에이브로
개발자Apache 소프트웨어 재단
초기 릴리즈2009년 11월 2일, 12년 전(2009-11-02)[1]
안정된 릴리스
1.10.2 / 2021년 3월 15일, 16개월 전(2021-03-15)[2]
저장소Avro 저장소
기입처Java, C, C++, C#, Perl, Python, PHP, Ruby
유형리모트 프로시저 호출 프레임워크
면허증.Apache 라이센스 2.0
웹 사이트avro.apache.org

AvroApache의 Hadoop 프로젝트 내에서 개발된 행 지향 원격 프로시저 호출 및 데이터 직렬화 프레임워크입니다.JSON을 사용하여 데이터 유형 프로토콜을 정의하고 데이터를 소형 이진 형식으로 직렬화합니다.주로 Apache Hadoop에서 사용되며, 영구 데이터에 대한 직렬화 형식과 Hadoop 노드 간 통신 및 클라이언트 프로그램에서 Hadoop 서비스에 대한 와이어 형식을 모두 제공할 수 있습니다.Avro는 스키마를 사용하여 인코딩되는 데이터를 구조화합니다.2종류의 스키마 언어가 있습니다.하나는 인간 편집용(Avro IDL)이고 다른 하나는 [3]JSON 기반의 기계 판독성이 뛰어난 언어입니다.

이것ThriftProtocol Buffers와 비슷하지만 스키마가 변경되었을 때 코드 생성 프로그램을 실행할 필요가 없습니다(정적으로 입력된 언어에 대해서는 필요하지 않습니다).

Apache Spark SQL은 데이터 소스로 [4]Avro에 액세스할 수 있습니다.

Avro 객체 컨테이너 파일

Avro 객체 컨테이너 파일은 다음과 같이 구성됩니다.[5]

파일 헤더는 다음과 같이 구성됩니다.

  • 4바이트, ASCII 'O', 'b', 'j' 뒤에 1(0x01)의 Avro 버전 번호(2진수 값 0x4F 0x62 0x6A 0x01)가 계속됩니다.
  • 스키마 정의를 포함한 파일 메타데이터.
  • 이 파일의 랜덤하게 생성된 16바이트 동기 마커.

데이터 블록의 경우 Avro는 바이너리와 JSON의 두 가지 직렬화 [6]인코딩을 지정합니다.대부분의 응용 프로그램은 이진 인코딩을 사용합니다. 이진 인코딩은 더 작고 빠르기 때문입니다.디버깅 및 웹 기반 애플리케이션의 경우 JSON 인코딩이 적절할 수 있습니다.

스키마 정의

Avro 스키마는 JSON을 사용하여 정의됩니다.스키마는 원시 유형(null, boolean, int, long, float, double, bytes 및 string)과 복합 유형(record, enum, array, map, union 및 fixed)[7]으로 구성됩니다.

단순 스키마 예시:

 {    "실패": "param.avro",    "타입": "레코드",    "이름: "사용자",    "필드": [       {"이름: "이름, "타입": "문자열'},       {"이름: "filename_number",  "타입": ["실패", "int"]},       {"이름: "color_color", "타입": ["실패", "문자열']}    ]   } 

시리얼화 및 디시리얼화

Avro의 데이터는 해당 스키마와 함께 저장될 수 있습니다. 즉, 미리 스키마를 알지 않고도 직렬화된 항목을 읽을 수 있습니다.

Python의 직렬화 및 직렬화 해제 코드 예시

시리얼화:[8]

수입품 avro.displaces의 부터 avro.data 파일 수입품 Data File Reader, Data File Writer 부터 avro.io 수입품 데이터 판독기, 데이터 라이터  스키마 = 에이브로.스키마.해석(열다.("user.avsc", "실패").읽어주세요())  # 쓸 스키마를 알아야 합니다.Apache Avro의 1.8.2에 따라  작가. = Data File Writer(열다.("users.avro", "실패"), 데이터 라이터(), 스키마) 작가..추가하다({"이름: '알리싸', "filename_number": 256}) 작가..추가하다({"이름: '벤', "filename_number": 8, "color_color": "빨간색"}) 작가..가까운.() 

파일 "users.avro"에는 JSON의 스키마와 데이터의 콤팩트한 바이너리 표현이[9] 포함됩니다.

$ ud -v -t x1z users.avro  0000000 4층 62 6a 01 04 14 61 76 72 6층 2e 63 6층 64 65 63  >Obj...avro.codec< > 0000020 08 6e 75 6c 6c 16 61 76 72 6층 2e 73 63 68 65 6d  >.param.avro.schem< > 0000040 61  03 7b 22 74 79 70 65 22 3a 20 22 72 65 63  >a..{"type": "rec< > 0000060 6층 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", "실행"< > 0000120 22 3a 20 22 65 78 61 6d 70 6c 65 2e 61 76 72 6층  >": "syslog.avro< > 0000140 22 2c 20 22 66 69 65 6c 64 73 22 3a 20 5b 7b 22  >", "필드": [{"< > 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  >", "displaces", "nam"< > 0000260 65 22 3a 20 22 66 61 76 6층 72 69 74 65 5f 6e 75  >e": "syslog_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', 'null'< > 0000340 6c 22 5d 2c 20 22 6e 61 6d 65 22 3a 20 22 66 61  >l", "이름", "fa"< > 0000360 76 6층 72 69 74 65 5f 63 6층 6c 6층 72 22 7d 5d 7d  >vorite_color"}]}< > 0000400 00 05 f9 a3 80 98 47 54 62 bf 68 95 a2 AB 42 에프  >......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...빨간색...GT< > 0000460 62 bf 68 95 a2 AB 42 에프 24                       >B.H.B.$< > 0000471 

역직렬화:

독자 = Data File Reader(열다.("users.avro", "실패"), 데이터 판독기())  # 스키마가 데이터 파일에 포함되어 있습니다. 위해서 유저  독자:     인쇄물 유저 독자.가까운.() 

출력은 다음과 같습니다.

{u'color_color': 없음., u'syslog_number': 256, u이름: u'알리싸'} {u'color_color': u'빨간색', u'syslog_number': 8, u이름: u'벤'} 

API를 사용하는 언어

이론적으로 어떤 언어든 Avro를 사용할 수 있지만 다음 언어에는 [10][11]API가 기술되어 있습니다.

Avro IDL

형식 및 프로토콜 정의를 JSON에 대한 지원을 게다가, 아브로 대안 인터페이스 기술 언어(IDL)구문 아브로 IDL. 이전에 GenAvro, 이 형식 사용자들에게 더욱 전통적인 IDLs 및 프로그래밍 언어에 구문 simila에 익숙한 방법으로 채택하도록 디자인되다로 알려져 experimental[20]지원 프로그램을 포함한다.r에C/C++, 프로토콜 버퍼 등.

Apache Avro 로고는 영국의 항공기 제조업체인 Avro(원래 A.V.)에서 유래했습니다.Roe and Company).[21]축구팀 에이브로 FC는 같은 로고를 [22]사용한다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Apache Avro: a New Format for Data Interchange". blog.cloudera.com. Retrieved March 10, 2019.
  2. ^ "Apache Avro Releases". avro.apache.org. Retrieved March 17, 2021.
  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. April 21, 2016.
  5. ^ "Apache Avro Specification: Object Container Files". avro.apache.org. Retrieved March 10, 2019.
  6. ^ "Apache Avro Specification: Encodings". avro.apache.org. Retrieved March 11, 2019.
  7. ^ "Apache Avro Getting Started (Python)". avro.apache.org. Retrieved March 11, 2019.
  8. ^ "Apache Avro Getting Started (Python)". avro.apache.org. Retrieved March 11, 2019.
  9. ^ "Apache Avro Specification: Data Serialization". avro.apache.org. Retrieved March 11, 2019.
  10. ^ phunt. "GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop". GitHub. Retrieved April 13, 2016.
  11. ^ "Supported Languages - Apache Avro - Apache Software Foundation". Retrieved April 21, 2016.
  12. ^ "Avro: 1.5.1 - ASF JIRA". Retrieved April 13, 2016.
  13. ^ "[AVRO-533] .NET implementation of Avro - ASF JIRA". Retrieved April 13, 2016.
  14. ^ "Supported Languages". Retrieved April 13, 2016.
  15. ^ "AvroEx". hexdocs.pm. Retrieved October 18, 2017.
  16. ^ "Avrora — avrora v0.21.1". hexdocs.pm. Retrieved June 11, 2021.
  17. ^ "Native Haskell implementation of Avro". Thomas M. DuBuisson, Galois, Inc. Retrieved August 8, 2016.
  18. ^ "Pure JavaScript implementation of the Avro specification". Retrieved May 4, 2020.
  19. ^ "Avro client library implementation in Rust". Retrieved December 17, 2018.
  20. ^ "Apache Avro 1.8.2 IDL". Retrieved March 11, 2019.
  21. ^ "The Avro Logo". avroheritagemuseum.co.uk. Retrieved December 31, 2018.
  22. ^ "AVRO F.C." avrojfc.org. Retrieved December 31, 2018.

추가 정보