Hive를 사용하며 상세한 Hive에 내용을 잘모르는 것 같아 정리를 해본다.
Managed Table vs External Table
메타스토어에 저장되는 테이블의 종류에는 2가지가 존재한다.
1) Managed Table(Internal table)
- 생성 시 location(hive.metastore.warehouse.dir) 위치에 directory에 저장되는 테이블
- 기본적으로 /user/hive/warehouse/databasename.db/tablename/ 위치에 저장
- location(hive.metastore.warehouse.dir) 변경 가능
- DROP Table/Partition 시, 메타스토어의 정보와 데이터가 함께 삭제
- 수명주기를 관리해야 하거나, 임시테이블을 생성할 때 사용
2) External table
- 외부테이블은 외부 파일의 메타 데이터/스키마를 설명하는 테이블
- 테이블 생성 시 location을 지정 해야되는 테이블
- 파일이 이미 있거나, 원격 위치(S3,원격 HDFS)에 있을 때 사용
- DDROP Table/Partition 시, 메타스토어의 정보만 삭제되고, 데이터와 디렉토리는 유지(옵션을 통해 삭제 가능)
Bucketing
버켓팅(Bucketing)
- 버켓팅은 지정된 칼럼의 값을 해쉬 처리하고 지정한 수의 파일로 나누어 저장
- 조인에 사용되는 키로 버켓 칼럼생성 -> 소트 머지 버켓(SMB) 조인으로 처리되어 수행속도가 빨라짐
- Bucketing을 하면 Join을 하거나 샘플링 작업을 할 경우 성능향상
버켓팅과 파티션의 차이 ?
간단하게 말하자면 파티션은 데이터를 디렉토리별로 나누어 저장하는 방식이고,
버켓팅에 경우 데이터를 파일별로 나누어 저장하는 방식
Join Type
1) Shuffle Join(Merge Join)
- 셔플(Shuffle) 단계에서 조인을 처리
- 두 개의 테이블을 조인할 때 각 테이블을 맵(Map) 단계에서 읽고, 파티션 키를 조인 키로 설정하여 셔플 단계에서 조인 키를 기준으로 리듀서로 데이터가 이동되고 테이블을 조인
2) Map Join(Broadcast Join)
- 두 개의 테이블 조인 시 하나의 테이블이 메모리에 로드 되어 처리
- 하나의 테이블이 메모리에 올라갈 수 있을 정도로 작을 경우 사용
- hive.auto.convert.join이 true일 때 적용
- hive.auto.convert.join.noconditionaltask.size= 10MB(기본값)
3) SMB Join
- 조인 테이블이 버켓팅 되어 있을 때 사용
- 버켓팅된 키의 정보를 이용하여 빠르게 조인을 처리
- 어떤 크기의 테이블에서도 가장 빠른 속도로 조인을 처리