Amazon EMR에서 PostgreSQL 데이터베이스를 Hive용 외부 메타스토어로 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 10월 10일

Amazon EMR에서 Amazon Relational Database Service(Amazon RDS) for PostgreSQL DB 인스턴스를 Apache Hive용 외부 메타스토어로 사용하려면 어떻게 해야 합니까?

해결 방법

시작하기 전에 다음 사항을 확인하십시오.

  • 이 해결 방법은 이미 활성 PostgreSQL 데이터베이스가 있다고 가정합니다.
  • Amazon EMR 릴리스 버전 5.7 이하를 사용하는 경우 PostgreSQL JDBC 드라이버를 다운로드합니다. 그런 다음, Hive 라이브러리 경로(/usr/lib/hive/lib)에 추가합니다. Amazon EMR 릴리스 버전 5.8.0 이상에서는 Hive 라이브러리 경로에서 PostgreSQL JDBC 드라이버를 제공합니다.

Hive용 외부 메타스토어로 PostgreSQL DB 인스턴스를 구성하려면 다음을 수행합니다.

1.    PostgreSQL DB 인스턴스를 생성합니다.

2.    데이터베이스와 ElasticMapReduce-master 보안 그룹 간 포트 5432에서 연결을 허용하도록 DB 인스턴스 보안 그룹을 수정합니다. 자세한 내용은 VPC 보안 그룹을 참조하십시오.

3.    외부 메타스토어 없이(기본 MySQL 데이터베이스만으로) Amazon EMR 클러스터를 시작합니다.

4.    SSH를 사용하여 마스터 노드에 연결합니다.

5.    다음 속성을 사용하여 Hive 구성을 대체합니다. 다음 예제에서 이 값을 대체합니다.
mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com: DB 인스턴스의 엔드포인트
mypgdb: PostegreSQL 데이터베이스 이름
database_username: DB 인스턴스 사용자 이름
database_password: DB 인스턴스 암호

[hadoop@ip-X-X-X-X ~]$ sudo vi /etc/hive/conf/hive-site.xml

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:postgresql://mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com:5432/mypgdb</value>
    <description>PostgreSQL JDBC driver connection URL</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.postgresql.Driver</value>
    <description>PostgreSQL metastore driver class name</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>database_username</value>
    <description>the username for the DB instance</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>database_password</value>
    <description>the password for the DB instance</description>
  </property>

6.    다음 명령을 실행하여 PostgreSQL 스키마를 생성합니다.

[hadoop@ip-X-X-X-X ~]$ cd /usr/lib/hive/bin/
[hadoop@ip-X-X-X-X bin]$ ./schematool -dbType postgres -initSchema  
Metastore connection URL:     jdbc:postgresql://mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com:5432/mypgdb
Metastore Connection Driver :     org.postgresql.Driver
Metastore connection User:     test
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.postgres.sql
Initialization script completed
schemaTool completed

7.    업데이트된 설정을 적용하도록 Hive 서비스를 중지한 후 시작합니다.

[hadoop@ip-X-X-X-X bin]$ sudo initctl list |grep -i hive
hive-server2 start/running, process 11818
hive-hcatalog-server start/running, process 12708
[hadoop@ip-X-X-X-X9 bin]$ sudo stop hive-server2
hive-server2 stop/waiting
[hadoop@ip-X-X-X-X bin]$ sudo stop hive-hcatalog-server
hive-hcatalog-server stop/waiting
[hadoop@ip-X-X-X-X bin]$ sudo start hive-server2
hive-server2 start/running, process 18798
[hadoop@ip-X-X-X-X bin]$ sudo start hive-hcatalog-server
hive-hcatalog-server start/running, process 19614

8.    Hive 셸을 로그인하고 Hive 테이블을 생성합니다. 다음 예제에서 테이블은 "test_postgres"입니다.

[hadoop@ip-X-X-X-X bin]$ hive

Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: true
hive> show databases;
OK
default
Time taken: 0.569 seconds, Fetched: 1 row(s)
hive> create table test_postgres(a int,b int);
OK
Time taken: 0.708 seconds

9.    PostgreSQL을 설치합니다.

[hadoop@ip-X-X-X-X bin]$ sudo yum install postgresql

10.   명령줄을 사용하여 PostgreSQL DB 인스턴스에 연결합니다. 다음 예제에서 이 값을 대체합니다.
mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com: DB 인스턴스의 엔드포인트
mypgdb: PostegreSQL 데이터베이스 이름
database_username: DB 인스턴스 사용자 이름

[hadoop@ip-X-X-X-X bin]$ psql --host=mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com --port=5432 --username=database_username --password --dbname=mypgdb

11.   메시지가 표시되면 DB 인스턴스의 암호를 입력합니다.

12.   다음 명령을 실행하여 이전에 생성한 Hive 테이블에 액세스할 수 있는지 확인합니다.

[hadoop@ip-X-X-X-X bin]$ select * from "TBLS";

 TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER  | RETENTION | SD_ID |   TBL_NAME    |   TBL_TYPE    | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT | IS_REWRITE_ENABLED 
--------+-------------+-------+------------------+--------+-----------+-------+---------------+---------------+--------------------+--------------------+--------------------
      1 |  1555014961 |     1 |                0 | hadoop |         0 |     1 | test_postgres | MANAGED_TABLE |                    |                    | f
(1 row)

이제 Amazon EMR 클러스터에서 PostgreSQL 데이터베이스를 Hive용 외부 메타스토어로 사용합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?