2020년 2월 6일 목요일

Greenplum-S3 연동 예제

### Greenplum에서 AWS S3 연동
1. 개요
    Greenplum에서 AWS S3연동에는 2가지 방식으로 가능합니다.
    1) Greenplum-S3 프로토콜 이용
    2) PXF를 이용한 S3 프로토콜 이용
이번에 블로그는 Greenplum-S3 연동 예제 입니다.

2. 메뉴얼
   - https://gpdb.docs.pivotal.io/6-3/admin_guide/external/g-s3-protocol.html


#### S3 생성
1. 테스트용 AWS 계정 생성
    - https://aws.amazon.com/ko/free/ 에 접속하면 5GB 미만으로 사용시 12개월 테스트 가능
2. S3 생성
   1) 버킷 만들기 : 버킷은 도메인주소 사용에 필요하여, DNS 형식으로 이름을 생성. 
       - 예시: s3-bigcrow79
   2) 리전 : 서울
       - 나중에 필요함.(서울의 경우 코드는 ap-northeast-2 임.
   3) ... 계속 계속 하면 됨.

3. The AWS Access Key Id 생성
   1) 내보안자격증명 클릭 (Identity and Access Management(IAM))
      - AWS 웹콘솔에서 오른쪽 상단 접속 ID(계정)을 클릭하면 리스트가 나오며 이중 내보안자격증명 클릭
      
   2) 보안자격증명에서 엑세스 키 및 비밀 액세스 키 발급
      - 새 엑세스키 만들기를 클릭하면 키파일 다운로드 가능
      - 액세스키 보이기하면 액세스키 ID 및 보안 액세스키 를 확인할 수 있음 (아래는 예시임. 실제 키값은 다름)
      ex) 액세스 키 ID: ZZIAJ54Z4MALHN5MQWZZ
          보안 액세스 키: zzvh78sA3cLMr+zQgJi86UU2TVWEfLl7DGfphdzz
      


#### Greenplum 셋팅
1. s3 프로토콜 사전 준비
1) s3 프로토콜 사용을 위해서 함수 생성 (각 database에 마다 생성)
     - S3 프로토콜 라이브러리를 이용하기 위함.
$ psql

=# CREATE OR REPLACE FUNCTION write_to_s3() RETURNS integer AS
   '$libdir/gps3ext.so', 's3_export' LANGUAGE C STABLE;

=# CREATE OR REPLACE FUNCTION read_from_s3() RETURNS integer AS
   '$libdir/gps3ext.so', 's3_import' LANGUAGE C STABLE;
   
2) S3 bucket 접속을 위하여 S3 프로토콜 선언
     - 각 DB에서 S3 Bucket를 접속할 수 있도록 S3 프로토콜 선언
$ psql
=# CREATE PROTOCOL s3 (writefunc = write_to_s3, readfunc = read_from_s3);

2. s3 프로토콜 설정 파일 생성 및 설정 정리
1) s3 설정 템플릿 생성
$ gpcheckcloud -t > ./mytest_s3.config   
$ cat mytest_s3.config
[default]
secret = "aws secret"
accessid = "aws access id"
threadnum = 4
chunksize = 67108864
low_speed_limit = 10240
low_speed_time = 60
encryption = true
version = 1
proxy = ""
autocompress = true
verifycert = true
server_side_encryption = ""
# gpcheckcloud config
gpcheckcloud_newline = "\n"
[gpadmin@mdw s3]$

2) 템플릿 파일 수정 - 테스트 용
$ cat /home/gpadmin/s3/s3.conf
[default]
secret = "zzvh78sA3cLMr+zQgJi86UU2TVWEfLl7DGfphdzz"
accessid = "ZZIAJ54Z4MALHN5MQWZZ"
threadnum = 4
chunksize = 67108864
[gpadmin@mdw ~]$

3) 설정파일을 모든세그먼트 노드에 복사
$ scp -r s3 sdw1:/home/gpadmin
$ scp -r s3 sdw2:/home/gpadmin
$ ssh sdw1
$ cd sr
$ ls -la /home/gpadmin/s3/s3.conf

4) 설정 확인 
$ gpcheckcloud -c "s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79 config=/home/gpadmin/s3/s3.conf [region=ap-northeast-2]"
File: greenplum-s3/s3_test.txt, Size: 19

Your configuration works well.    ### 정상일 경우 왼쪽의 메시지 출력

#### Greenplum-S3 테스트

1. S3 연동 테스트  (S3 압축 예제, Default)
$ psql
=# 
create table s3_base (id int, ts timestamp, amt int)
distributed by (id);

insert into s3_base select i, now(), i from generate_series(1, 100) i;
   
CREATE READABLE EXTERNAL TABLE S3TBL (id int, ts timestamp, amt int)
   LOCATION('s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/ config=/home/gpadmin/s3/s3.conf')
   FORMAT 'csv';   
   
CREATE WRITABLE EXTERNAL TABLE S3WRIT (id int, ts timestamp, amt int)
   LOCATION('s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/ config=/home/gpadmin/s3/s3.conf')
   FORMAT 'csv';   

insert into S3WRIT select * from s3_base;

select * from S3TBL;
gpadmin=# select * from S3TBL;
 id  |             ts             | amt
-----+----------------------------+-----
   1 | 2020-02-06 20:34:05.987925 |   1
  12 | 2020-02-06 20:34:05.987925 |  12
  44 | 2020-02-06 20:34:05.987925 |  44
  72 | 2020-02-06 20:34:05.987925 |  72
  74 | 2020-02-06 20:34:05.987925 |  74
  78 | 2020-02-06 20:34:05.987925 |  78
  ...

2. S3에 데이터 저장 형태
1) 파일 형식
   - 세그먼트 인스턴스별로 하나의 파일이 생성 됨.
   - .[.gz] 
s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/03388514d.csv.gz    
s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/11x80514d.csv.gz    
s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/27xx5014d.csv.gz    
s3://s3.ap-northeast-2.amazonaws.com/s3-bigcrow79/normal/3x388514d.csv.gz    

2) 파일 형태
   - 기본적으로 gz 형태로 압축되며, Greenplum 6.3.0 기준으로는 gzib과 plain 두가지 방식으로 저장 됨.

댓글 없음:

댓글 쓰기

Greenplum Backup & Restore

Greenplum에서는 gpbackup과 gprestore를 이용해서 대량의 데이터를 병렬로 백업/병렬로 복구를 지원하고 있습니다. Full 백업이외에도 incremental 백업을 지원하고 있습니다.  - incremental 백업시에는 반드시 사전...