[Hadoop] Hadoop 2.2.0 (3) – Using Sequence File

By | Y2014Y2014-8M-ȭD

내가 보고 있는 구닥다리 버전의 “톰 화이트” 선생이 쓴 [Hadoop 완벽 가이드] 를 보면 – 다른 책도 마찬가지겠지만 – 주어진 예제 데이터(기상, 항공노선운행정보 등)을 읽어서 간단히 처리해 보는 것으로 시작했을 것 같다.

하둡을 시작하면서 나 같은 초보자들은 당연히 데이터를 하둡의 파일시스템에 원하는대로 저장, 읽기를 바랄 것이고 그 결과를 출력하기를 바랄 것이다.

하둡의 파일 종류는, 현재까지 공부하기로는 기본적으로는 hadoop filesystem IO (org.apache.hadoop.fs) API를 통한 단순 파일 저장이 있고 (텍스트 데이터가 되겠다.), Binary Data의 blob(Binary Large Object)들을 저장하기 위해 제공하는 Sequence File 형태가 있다. 물론, 특정 레코드 기반 타입의 작은 데이터들을 하둡에 저장하기 위해서는 Sequence File 의 각각의 레코드에 저장하는 것이 좋겠다.

Sequence File 구조는 다음과 같다.

|–헤더–||–레코드–|…nn…|–레코드 –||–Sync Ind.–||–레코드–|….

|————–Block—————|
(block length.: io.seqfile.compress.blocksize, default: 1,000,000byte)

하나의 레코드 구조는 다음과 같다.

4byte            4byte  (by java.io.DataOutput.wrtedInt() method rule)
|–레코드 길이–||–키 길이–||–키–||–값–|

책의 내용에 따르면, SequenceFile 기반으로 키 검색을 지원하기 위해 색인과 함께 정렬된 것을 MapFile 이라 하며 이 MapFile은 메모리에서 유지되고 있는 Map의 크기 이상으로 증가할 수 있는 java.util.Map의 영속적인 형태로 간주할 수 있다고 한다.

현재는 판올림이 되면서 org.apache.hadoop.io.MapFile.Writer(Reader) 는 deprecated 된 상태이며, 현재는 io.SetFile, io.MapFile 을 이용한다.(여기에 대해서는 하단의 cloudera 에서 제공하는 링크를 참고하시기 바란다.)

MapFile Type에 대한 Data Type에 대해 적어보면,  SetFile 과 ArrayFile은 MapFile 기반이

Structure of BloomFile

Structure of BloomFile

며, 코드 몇 줄로 구현되어 있다. append(key, value) 를 대신하는 SetFile은 key 필드를 append(key)로 추가하며, value는 항상 NullWritable 인스턴스로 되어 있다. ArrayFile 은 레코드 번호와 카운트+1 한 값을 포함하는 LongWritable 인스턴스로 되어 있는 키와 append(value) 를 하는 값 필드로 되어 있다.
BloomMapFile은 MapFile을 상속한 형태며 블룸 파일인 “/bloom” 은 더해진 키로 채워진 DynamicBloomFilter 로 직렬화를 포함하는 파일이다.  이 파일은 Close 동작을 수행하는 동안에 전체적으로 쓰게 된다.

referenceHadoop I/O: Sequence, Map, Set, Array, BloomMap Files

2,475 total views, 1 views today

댓글 남기기