[Hive] 클러스터간 External Table 복제 - Distcp
in Devlog on Bigdata, Hive
Hive 테이블 데이터를 다른 클러스터로 복제하는 효율적인 방법은 distcp(distributed copy)를 이용하는 방법이다.
Hive External Table 을 Distcp를 이용해 복제하는 방법을 정리해본다.
시나리오
운영계 클러스터에 존재하는 External Table을 분석계 클러스터에 복제한다.
운영계 Table => 분석계 Table (복제)
대상 table : cust_prd_dd
External Table
partition column : base_dt (yyyymmdd)
1. 테이블 생성
목적지인 분석계 클러스터에 복제될 Hive 테이블을 미리 생성한다.
테이블 생성은 운영계 Hive 테이블의 생성 스크립트를 이용하는데 아래 show 명령어를 통해 생성 스크립트를 확인할 수 있다.
show create table cust_prd_dd;
2. distcp
Hive External Table 은 HDFS 내 특정 디렉토리와 그 안에 있는 데이터파일 자체를 사용하여 만들어지기 때문에 External Table 복제의 경우도 디렉토리 전체를 distcp를 이용하여 복제하면 된다.
distcp 커맨드는 아래와 같다.
#distcp 커맨드
$hadoop distcp {소스 대상} {타겟 대상}
#소스대상과 타겟 대상은 네임노드와 대상 디렉토리를 지정해준다
$hadoop distcp hdfs://{소스 네임노드}:8020/{테이블경로} hdfs://{타겟 네임노드}:8020/{테이블경로}
# sample
$hadoop distcp hdfs://10.10.10.10:8020/hive/dw/db/cust_prd_dd hdfs://10.10.10.20:8020/hive/dw/db/cust_prd_dd
이번 시나리오는 파티셔닝 테이블이기 때문에 다음과 같이 -update 옵션을 주어 ./cust_prd_dd 하위 파티셔닝 디렉토리가 복제되도록 한다.
$hadoop distcp -update hdfs://10.10.10.10:8020/hive/dw/db/cust_prd_dd hdfs://10.10.10.20:8020/hive/dw/db/cust_prd_dd
3. Hive 메타정보 반영
분석계에 디렉토리 및 파일이 모두 복제 되면 Hive 메타정보를 갱신하여 HiveQL 로 데이터 조회가 가능하도록 해준다.
메타정보 갱신을 해주지 않으면 SELECT 해도 데이터 조회가 안된다.
메타정보 갱신은 MSCK 명령어로 작업한다.
MSCK REPAIR TABLE cust_prd_dd SYNC PARTITIONS;
4. 데이터 건수 검증
운영계 테이블과 분석계 테이블의 건수 검증을 통하여 테이블 복제 작업의 정상여부를 확인 한다.