Hadoop io part2

22
Hadoop I/O part2 choong

description

하둡 마스터 4장. 하둡 I/O 두번째 파트 아키텍트를 꿈꾸는 사람들 오후반

Transcript of Hadoop io part2

Page 1: Hadoop io part2

Hadoop I/O part2

choong

Page 2: Hadoop io part2

직렬화

객체 객체File

Network직렬화 역 직렬화

Page 3: Hadoop io part2

Avro

• apache project

• 언어 중립적인 데이터 시스템

• IDL 기반 직렬화 프레임 워크

• Record I/O <<<<<< Avro

Page 4: Hadoop io part2

Avro 개념

스키마 정의 JSON 데이터(레코드1, 레코드2)

스키마 + 데이터

스키마 정보 바이너리 데이터

레코드1

레코드2

스키마 정보 이용레코드 추출

A System

B System

Page 5: Hadoop io part2

schema

• Schema 작성.

• JSON format.

• IDL(Interface Description Language)

• 풍부한 분석 기능.

Page 6: Hadoop io part2

schema format

JSON

IDL

Page 7: Hadoop io part2

Avro data file

• 객체의 순서를 위해 객체 컨테이너 포맷을지정 가능.

• 스키마가 저장되는 메타데이터 절을 가짐.

• 분활, 압축 가능.

Page 8: Hadoop io part2

Avro data type

• 프리미티브 타입• null,boolean,int,long,float, double, bytes,string

• 복합 타입

• array, map, record, enum,fixed, union{

"type" : "record"

"name" : "choong"

"doc" : "choong test"

"fields":[{"name":"year"."type":"int"},

{"name":"name"."type":"string"}

]

}

Page 9: Hadoop io part2

Data mapping

• Generic mapping.

• 동적인 타입 매핑

• Specific mapping.

• 데이터를 표현 하기 위해 코드 생성.

• Reflect mapping.(only java)

• 미리 존재 하는 자바 타입과 매핑

Page 10: Hadoop io part2

Avro 직렬화 API

• 직렬화 / 역 직렬화 API 제공

• Avro와 프레임 형식이 이미 정의 된 기존메시징 시스템과 연동할 때 유용.

Page 11: Hadoop io part2

Avro 직렬화 API 만들기

• Avro 스키마 작성. (.avsc 기본 확장자)

• GenercinData.Record() 이용하여 레코드의 인스턴스 생성.

• 레코드를 출력 스트림으로 직렬화

• DatumWriter : Encoder가 이해 할수 있는 타입으로변환.

• Encoder : 출력 스트림에 데이터 기록.

• Encoder 의 flush() 출력 스트림 종료.

• 반대로 하면 바이트 버퍼 객체 읽기 가능.

Page 12: Hadoop io part2

Avro datafile

• 연속적인 avro 객체를 저장할 때 사용.

• 모든 언어에 이식 되도록 설계.

• Avro datafile 구성

• Header : 스키마를 포함 메타데이터

• Syncmarker

• 직렬화 된 Avro객체의 연속된 블록.

Page 13: Hadoop io part2

스키마 레졸루션

• 데이터를 다시 읽거나 쓸 때 사용했던 것 과 다른 스키마를 사용하도록 선택 가능.

• 프로젝션 동작

• 많은 필드가 있는 레코드 중 일부분 읽을 때 유용.

Page 14: Hadoop io part2

레코드 스키마 레졸루션

새로운 스키마 Writer Reader 동작

추가된 필드 기존 신규 reader는 새로운 필드의 기본값을 사용.

신규 기존 Reader는 writer에 의해 기록된 새로운 필드에서 모르기 때문에 무시(프로젝션)

제거된 필드 기존 신규 Reader는 제거된 필드를 무시(프로젝션)

신규 기존 제거 된 필드에 기본값이 있다면 reader는 이필드 사용, 그렇지 않는 경우 오류.

Page 15: Hadoop io part2

정렬순서

• 객체에 대한 정렬순서 정의 가능.

• 기본적인 정렬 순서를 가짐.

• Order 속성 : ascending(기본), descending, ignore.

• 바이너리 비교 수행.

Page 16: Hadoop io part2

SequenceFile

• 바이너리 키 – 값 에 대한 영속적인 데이터 구조 제공.

• 작은 파일을 위한 컨테이너에서도 동작.

• 파일을 SequenceFile로 랩핑 하여 저장하고처리하는 편이 효율적.

Page 17: Hadoop io part2

SequenceFile 쓰기

• SequenceFile 생성

• SequenceFile.Writer 인스턴스를 반환 하는SequenceFile.createWriter()

• append() 로 키-값을 쓰고 쓰기가 끝나면close() 호출.

Page 18: Hadoop io part2

SequenceFile 읽기

• SequenceFile.Reader 인스턴스 생성

• next() 반복 호출 하여 레코드 읽기.• public boolean next(Writable key, Writable val)

• 값이 있으면 true를 반환, 없는 경우 false를 반환.

Page 19: Hadoop io part2

SequenceFile 탐색

• seek()

• 주어진 위치에 리더를 위치시킴.

• 위치에 레코드영역이 없는 경우 next()호출시 IOException 발생.

• 동기화 포인트

• sync()

• position 이후의 다음 동기화 포인트로 이동.

Page 20: Hadoop io part2

SequenceFile format(record)

헤더 레코드 동기화표시자 레코드 레코드 동기화표시자

레코드길이 키길이 키 값

레코드길이 키길이 키 압축된값

4 4

4 4

Page 21: Hadoop io part2

SequenceFile format(block)

동기화표시자 블록 동기화표시자 블록 동기화표시자 블록

레코드개수 압축된 키길이 압축된 키 압축된 값의 길이

헤더

압축된 값

Page 22: Hadoop io part2

MapFile

• 키 검색을 지원하기 위해 색인과 함께 정렬된 SequenceFile

• MapFile의 읽기 쓰기는 SequenceFile과 유사.