예제파일 : TemplateSerde.java
| 기존방법 | 권고방법 | 비고 |
차이점 | 인터페이스를 상속하여 구현(implements) 곧 Deprecated 예정 | 추상화 클래스를 상속하여 구현(extends) | 인터페이스에서 추상화 클래스로 변경됨(클래스 위치: org.apache.hadoop. hive.serde2) |
직렬화/역직렬화 모두 구현시 상속 | SerDe 인터페이스 상속 곧 Deprecated 예정
| AbstractSerDe 추상화클래스 상속하여 구현(extends) | 동일 구현 메소드 Initialize getSerializedClass serialize deserialize getObjectInspector getSerDeStats |
직렬화만 구현 | Serializer 인터페이스 상속 | AbstractSerializer 추상화클래스 상속하여 구현(extends) | 구현 메소드 Initialize getSerializedClass serialize getSerDeStats |
역직렬화만 구현 | Deserializer 인터페이스 상속
| AbstractDeserializer 추상화클래스 상속하여 구현(extends)
| 구현 메소드 Initialize deserialize getObjectInspector getSerDeStats |
1). 공통구현 메소드
- Initialize
해당 테이블의 컬럼 개수, 컬럼의 Type 정보를 얻을 수 있으며, 기본 구분자는 “,” 를 사용한다.
- getSerDeStats
row 수 사이즈 등을 저장한 정보를 제공(불필요시에 Null 을 리턴)
2) 직렬화 구현 메소드
- getSerializedClass
HDFS 에 저장시 사용될 Writable을 상속한 클래스를 정의하여 리턴한다.
- serialize
테이블이 조회되어 한 row 에 대한 정보가 들어오며 해당 정보를 조합하여 HDFS 에 저장될 Line 을 생성한다.
3) 역직렬화 구현 메소드
- getObjectInspector
Table 에 저장될 각 컬럼의 타입을 저장하여 리턴한다.
- deserialize
HDFS 에서 조회된 한 Line 별 정보가 입력되며 해당 값을 필요에 따라 Parsing 하여 테이블에 저장될 구조의 array 를 만들어서 리턴한다.
2. 실행
1) 직렬화
※ 직렬화 jar 의 경우 HDFS 에서 사용하기 때문에 경로에 대한 path 또는 HDFS 에서 사용하는 jar 에 포함 시켜야함
1-1) 실행
INSERT OVERWRITE LOCAL DIRECTORY '저장될 LOCAL 경로’ ROW FORMAT SERDE ‘등록한 직렬화클래스’ SELECT * FROM 테이블명;
※ INSERT OVERWRITE DIRECTORY 처럼 LOCAL 을 생략시 HDFS 에 저장됨. 단 구현한 직렬화 클래스가사용안됨
1-2) 확인
LOCAL syntax 사용 여부에 따라 로컬 경로 또는 hdfs 의 경로로 해당 파일 조회(000000_0 으로 해당 폴더에 파일이 생성됨)
2) 역직렬화
2-1) 해당 Serde 을 하이브에 등록한다.
Add jar ./파일명.jar
2-2) Table 을 생성한다.
Create table IF NOT EXISTS 테이블명 {
Id STRING,
name STRING
..(이와 같은 형태로 테이블의 구조를 생성)
}
ROW FORMAT SERDE ‘등록할 역직렬화가 구현된 클래스’
3) HDFS 의 데이터 로드
Syntax> LOAD data <LOCAL> inpath <file path> into table [tablename]
LOAD DATA INPATH 'HDFS 상의 데이터 경로' OVERWRITE INTO TABLE 생성한 테이블명;
4) 확인
SELECT * from 생성한 테이블명;
'IT > 빅데이터(bigData)' 카테고리의 다른 글
hive 에서 형변환 함수 (0) | 2014.12.02 |
---|---|
하이브(hive) udf (0) | 2014.11.25 |
Hive 의 Serde 1 (0) | 2014.11.25 |
MapReduce 데이터 흐름 분석 (0) | 2014.11.25 |
Mapper 클래스 구성 및 사용 (0) | 2014.11.22 |