아파치 에이브로
Apache Avro![]() | |
개발자 | Apache 소프트웨어 재단 |
---|---|
초기 릴리즈 | 2009년 11월 [1] | , 전(
안정된 릴리스 | 1.10.2 / 2021년 3월 15일, [2] 전( |
저장소 | Avro 저장소 |
기입처 | Java, C, C++, C#, Perl, Python, PHP, Ruby |
유형 | 리모트 프로시저 호출 프레임워크 |
면허증. | Apache 라이센스 2.0 |
웹 사이트 | avro |
Avro는 Apache의 Hadoop 프로젝트 내에서 개발된 행 지향 원격 프로시저 호출 및 데이터 직렬화 프레임워크입니다.JSON을 사용하여 데이터 유형 및 프로토콜을 정의하고 데이터를 소형 이진 형식으로 직렬화합니다.주로 Apache Hadoop에서 사용되며, 영구 데이터에 대한 직렬화 형식과 Hadoop 노드 간 통신 및 클라이언트 프로그램에서 Hadoop 서비스에 대한 와이어 형식을 모두 제공할 수 있습니다.Avro는 스키마를 사용하여 인코딩되는 데이터를 구조화합니다.2종류의 스키마 언어가 있습니다.하나는 인간 편집용(Avro IDL)이고 다른 하나는 [3]JSON 기반의 기계 판독성이 뛰어난 언어입니다.
이것은 Thrift 및 Protocol 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]사용한다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Apache Avro: a New Format for Data Interchange". blog.cloudera.com. Retrieved March 10, 2019.
- ^ "Apache Avro Releases". avro.apache.org. Retrieved March 17, 2021.
- ^ Kleppmann, Martin (2017). Designing Data-Intensive Applications (First ed.). O'Reilly. p. 122.
- ^ "3 Reasons Why In-Hadoop Analytics are a Big Deal - Dataconomy". dataconomy.com. April 21, 2016.
- ^ "Apache Avro Specification: Object Container Files". avro.apache.org. Retrieved March 10, 2019.
- ^ "Apache Avro Specification: Encodings". avro.apache.org. Retrieved March 11, 2019.
- ^ "Apache Avro Getting Started (Python)". avro.apache.org. Retrieved March 11, 2019.
- ^ "Apache Avro Getting Started (Python)". avro.apache.org. Retrieved March 11, 2019.
- ^ "Apache Avro Specification: Data Serialization". avro.apache.org. Retrieved March 11, 2019.
- ^ phunt. "GitHub - phunt/avro-rpc-quickstart: Apache Avro RPC Quick Start. Avro is a subproject of Apache Hadoop". GitHub. Retrieved April 13, 2016.
- ^ "Supported Languages - Apache Avro - Apache Software Foundation". Retrieved April 21, 2016.
- ^ "Avro: 1.5.1 - ASF JIRA". Retrieved April 13, 2016.
- ^ "[AVRO-533] .NET implementation of Avro - ASF JIRA". Retrieved April 13, 2016.
- ^ "Supported Languages". Retrieved April 13, 2016.
- ^ "AvroEx". hexdocs.pm. Retrieved October 18, 2017.
- ^ "Avrora — avrora v0.21.1". hexdocs.pm. Retrieved June 11, 2021.
- ^ "Native Haskell implementation of Avro". Thomas M. DuBuisson, Galois, Inc. Retrieved August 8, 2016.
- ^ "Pure JavaScript implementation of the Avro specification". Retrieved May 4, 2020.
- ^ "Avro client library implementation in Rust". Retrieved December 17, 2018.
- ^ "Apache Avro 1.8.2 IDL". Retrieved March 11, 2019.
- ^ "The Avro Logo". avroheritagemuseum.co.uk. Retrieved December 31, 2018.
- ^ "AVRO F.C." avrojfc.org. Retrieved December 31, 2018.
추가 정보
- White, Tom (November 2010). Hadoop: The Definitive Guide. ISBN 978-1-4493-8973-4.