### 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 두가지 방식으로 저장 됨.
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) 파일 형식
- 세그먼트 인스턴스별로 하나의 파일이 생성 됨.
-
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 두가지 방식으로 저장 됨.
댓글 없음:
댓글 쓰기