본문 바로가기

[Data Engineering]/[Sqoop]

[Sqoop] Avro File

728x90

[Avro File]

 

Welcome to Avro!

Welcome to Avro! Introduction Avro is a data serialization system. Avro provides: Rich data structures. A compact, fast, binary da

avro.apache.org

  Avro 또한 Parquet과 같이 데이터를 관리하기 위한 포맷의 일종이다. 특정 언어에 종속되지 않은 언어 중립적 데이터 직렬화 시스템으로 더그 커팅이 하둡 Writable(직렬화 방식)의 주요 단점인 언어 이식성(language portablility)을 해결하기 위해 만든 프로젝트이다. Avro의 특징을 요약하면 다음과 같다.

  • Data Serialization Framework
  • Language Neutral - C/C++ Java etc
  • Schema & Data tied together
  • Data -> Compressed in binary format
  • Schema -> Written using JSON format
  • Good performance in terms of storage & processing

  그리고 추가적으로, Avro file은 Row-based 구조이기 때문에 full-scan 이라던지 모든 칼럼을 전부 조회하는 경우에 Parquet 형식보다 유리하다는 장점이 있다. 이 지점에서 주로 사용하려는 목적에 따라 Avro와 Parquet을 구분하면서 사용하면 되겠다는 생각이 들었다. 그러면 실제로 어떻게 파일이 만들어지는지 보도록 하자.

 

[Avro file 사용하기]

  사용할 데이터베이스는 아래에 보이는 orders 테이블 이다. id, date, customer_id, status에 해당하는 총 4개의 칼럼을 가지고 있다. 

위의 orders 테이블을 avro file로 저장하기 위한 명령어는, 그저 맨 마지막에 --as-avrodatafile 테그만 붙여주면 된다.

sqoop import \
> --connect jdbc:mysql://localhost/retail_db \
> --username root \
> --password admin123 \
> --table orders \
> --target-dir /user/avro \
> --as-avrodatafile

잘 저장이 되었다면 이제 파일을 확인해 보도록 하자. hdfs 명령어로, 지정한 위치에 avro file이 생성되었는지 확인해본다.

그리고 hdfs dfs -cat으로 데이터파일을 확인해보면 다음과 같이 압축된 형태로 저장된 것을 볼 수 있다. 

그러면 데이터는 어떻게 읽어오나? 역시 tool을 이용하면 프로그래머가 읽을 수 있게 파일을 변환할 수 있다. 

 

Apache Avro™ 1.10.2 Getting Started (Java)

Apache Avro™ 1.10.2 Getting Started (Java) This is a short guide for getting started with Apache Avro™ using Java. This guide only covers using Avro for data serialization; see Patrick Hunt's Avro RPC Quick Start for a good introduction to using Avro f

avro.apache.org

hadoop jar ./avro-tools-1.8.2.jar tojson /user/avro/part-m-00000.avro

  역시, meta 데이터만 보고 싶다면 tojson 부분을 getmeta로 바꾸면 된다! schema? getschema를 사용하면 된다. 그러면 아래에 보이듯이 이쁘게 schema를 확인해 볼 수 있다. 또한 .avsc형식으로 저장해서 스키마만 따로 관리하는 것도 가능하다.

다음에는 Compression에 대해 정리해 보겠다.

728x90

'[Data Engineering] > [Sqoop]' 카테고리의 다른 글

[Sqoop] Parquet File  (0) 2021.09.20
[Sqoop] Warehouse / Target Dir  (0) 2021.09.20
[Sqoop] Sqoop-Intro  (0) 2021.09.19