The EDB Blog
March 2, 2017

Postgres는 오늘날의 통합 데이터 센터에서 중요한 역할을 합니다. Postgres의 강력한 기능 중 하나인 외부 데이터 래퍼(FDW)는 마치 단일 Postgres 데이터베이스인 것처럼 다중 데이터베이스 솔루션에서 데이터를 결합하여 데이터 통합을 지원합니다. FDW는 기본적으로 MongoDB, Cassandra 또는 Hadoop과 같은 NoSQL 솔루션을 포함하는 외부 데이터베이스 솔루션과 Postgres를 연결하고 SQL로 쿼리할 수 있는 Postgres에 데이터를 표시하는 파이프라인 역할을 합니다. 결과적으로 데이터를 완벽하게 파악할 수 있으며 데이터베이스 관리자의 제어 능력이 향상됩니다.

(자세한 내용은 Stephen Horn의 게시물, OLTP 데이터베이스의 장점 재발견을 참조하십시오.)

Enterprise-ready Postgres tools for high availability, monitoring, and disaster recovery. Download Now.

EnterpriseDB®(EDB™) invests significantly in research and development into FDWs and  releases key advances to the open source community to further this capability for all Postgres users. As advances in Postgres progress, EnterpriseDB releases new versions of FDWs to take advantage of emerging capabilities (e.g., Hadoop, MongoDB, and MySQL). EnterpriseDB also offers EDB Postgres Data Adapters for Hadoop, MongoDB, and MySQL as packaged solutions for the EDB Postgres™ Platform. The FDWs developed by EnterpriseDB can be found on EDB’s GitHub page, or via StackBuilder Plus or yum.enterprisedb.com if you are an EnterpriseDB subscription holder.

가장 최근의 EnterpriseDB 개선 기능은 Apache Spark 클러스터 컴퓨팅 프레임워크에 대한 호환성을 갖춘 새로운 버전의 EDB Postgres Data Adapter for Hadoop입니다. 조직은 이 새로운 버전을 통해 Apache Spark 인터페이스를 사용하여 HDFS(Hadoop Distributed File System) 기반의 분석 워크로드를 Postgres의 운영 데이터와 결합할 수 있습니다. (새 버전은 2017년 2월 8일에 발표되었습니다. 관련 보도 자료를 보려면 여기를 클릭하십시오.)

Apache Spark를 사용하는 Hadoop FDW의 예가 아래에 나와 있습니다. Apache Spark는 다양한 사용 사례를 지원하는 범용, 분산 컴퓨팅 프레임워크로 실시간 스트림과 함께 속도, 사용 편의성, 정교한 분석 기능을 갖춘 배치 처리 성능을 제공합니다. Spark는 스토리지 계층을 제공하지 않으며 대신 Hadoop, HBASE, Cassandra, S3 등과 같은 타사 스토리지 제공 업체를 활용합니다. Spark는 Hadoop과 완벽하게 통합되며 기존 데이터를 처리할 수 있습니다. Spark SQL은 HiveQL과 100% 호환되며 Spark Thrift Server를 사용하여 hiveserver2를 대체할 수 있습니다. (HDFS_FDW와 Hive와 함께 사용하는 방법에 대한 배경 설명이 필요하면 Hadoop에서 Postgres로의 진화 블로그 게시물을 참조하십시오)

Apache Spark의 장점:

  • Apache Spark는 속도가 빠릅니다. Hive와의 비교 정보는 다음 블로그 게시물, Hive 대 SparkSQL을 참조하십시오.
  • Apache Spark는 범용 프레임워크로 주요 기능은 다음과 같습니다.
    • 배치 처리(MapReduce)
    • 스트림 처리(Storm)
    • 대화형 처리(Impala)
    • 그래프 처리(Neo4J)
    • Spark SQL(Hive)
  • Apache Spark는 다음과 같은 많은 타사 스토리지 제공 업체와 형식을 지원합니다.
    • Hadoop
    • HBASE
    • Cassandra
    • Amazon S3
    • Parquet

Hadoop 클러스터 대신 Apache Spark로 hdfs_fdw 사용:

hdfs_fdw를 사용하려면 다음 구성요소가 설치되어야 합니다.

설정은 다음과 같습니다.

Apache Spark로 hdfs_fdw 사용 단계:

1. 설치 관리자를 사용하여 EDB Postgres Advanced Server 9.5와 hdfs_fdw를 설치합니다.

2. edb-psql 프롬프트에서 다음 명령을 실행합니다.

         CREATE EXTENSION hdfs_fdw;

    CREATE SERVER hdfs_svr FOREIGN DATA WRAPPER hdfs_fdw

    OPTIONS (host '127.0.0.1',port '10000',client_type 'hiveserver2');   

    CREATE USER MAPPING FOR enterprisedb server hdfs_svr;

    CREATE FOREIGN TABLE f_names_tab( a int, name varchar(255)) SERVER hdfs_svr
    OPTIONS (dbname 'testdb', table_name 'my_names_tab');

Spark Thrift Server는 Hive Thrift Server와 호환되므로 외부 서버를 만들면서 동일한 포트와 client_type을 사용합니다. Hiveserver2를 사용하는 어플리케이션은 코드 변경 없이 Spark에도 사용할 수 있습니다.

3. Apache Spark를 로컬 모드로 다운로드하고 설치합니다.

4. 스파크 셸을 사용하여 Apache Spark 설치를 테스트합니다.

    ./spark-shell
    Spark session available as 'spark'.
    Welcome to  

             

    Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111)
    Type in expressions to have them evaluated.
    Type :help for more information.

    scala> val no = Array(1, 2, 3, 4, 5,6,7,8,9,10)
    no: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    scala> val noData = sc.parallelize(no)
    scala> noData.sum
    res0: Double = 55.0

 

5. $SPARK_HOME/conf 폴더에서 다음 행을 포함하는 spark-defaults.xml 파일을 만듭니다.

    spark.sql.warehouse.dir hdfs://localhost:9000/user/hive/warehouse

   기본적으로 Apache Spark는 메타데이터와 데이터 자체에 모두 더비를 사용합니다(Apache Spark의 경우 웨어하우스). Apache Spark가 Hadoop을 웨어하우스로 사용하려면 이 속성을 추가해야 합니다.

6. Spark Thrift Server를 시작합니다.

    ./start-thriftserver.sh

7. 로그 파일을 보고 Spark Thrift Server가 실행 중인지 확인합니다.

8. 직선 명령줄 도구에서 다음 명령을 실행합니다.

  ./beeline
  Beeline version 1.0.1 by Apache Hive
  beeline> !connect jdbc:hive2://localhost:10000 abbasbutt '' org.apache.hive.jdbc.HiveDriver
  Connecting to jdbc:hive2://localhost:10000
  Connected to: Spark SQL (version 2.1.0)
  Driver: Hive JDBC (version 1.0.1)
  Transaction isolation: TRANSACTION_REPEATABLE_READ
  0: jdbc:hive2://localhost:10000> create database my_test_db;
  +---------+--+
  | Result  |
  +---------+--+
  +---------+--+
  No rows selected (0.379 seconds)
  0: jdbc:hive2://localhost:10000> use my_test_db;
  +---------+--+
  | Result  |
  +---------+--+
  +---------+--+
  No rows selected (0.03 seconds)
  0: jdbc:hive2://localhost:10000> create table my_names_tab(a int, name string)
                                   row format delimited fields terminated by ' ';
  +---------+--+
  | Result  |
  +---------+--+
  +---------+--+
  No rows selected (0.11 seconds)
  0: jdbc:hive2://localhost:10000>

 

  0: jdbc:hive2://localhost:10000> load data local inpath '/path/to/file/names.txt'
                                   into table my_names_tab;
  +---------+--+
  | Result  |
  +---------+--+
  +---------+--+
  No rows selected (0.33 seconds)
  0: jdbc:hive2://localhost:10000> select * from my_names_tab;
  +-------+---------+--+
  |   a   |  name   |
  +-------+---------+--+
  | 1     | abcd    |
  | 2     | pqrs    |
  | 3     | wxyz    |
  | 4     | a_b_c   |
  | 5     | p_q_r   |
  | NULL  | NULL    |
  +-------+---------+--+

9. Apache Thrift Server를 중지합니다.

    ./stop-thriftserver.sh

10. 인증 없이 Apache Thrift Server를 시작합니다.

    ./start-thriftserver.sh --hiveconf hive.server2.authentication=NOSASL

11. edb-psql에서 다음 명령을 실행합니다.

    select * from f_names_tab;
     a |  name
    ---+--------
     1 | abcd
     2 | pqrs
     3 | wxyz
     4 | a_b_c
     5 | p_q_r
     0 |
    (6 rows)

Hadoop의 해당 파일은 다음과 같습니다.

$ hadoop fs -ls /user/hive/warehouse/
Found 1 items
drwxrwxr-x - user supergroup 0 2017-01-19 10:47 /user/hive/warehouse/my_test_db.db
$ hadoop fs -ls /user/hive/warehouse/my_test_db.db/
Found 1 items
drwxrwxr-x - user supergroup 0 2017-01-19 10:50 /user/hive/warehouse/my_test_db.db/my_names_tab

Download EDB Postgres Advanced Server 9.5 and the Data Adapter for Hadoop from the Advanced Downloads page on the EnterpriseDB website.

위 설정 단계를 보여주는 17분 길이의 데모 동영상은 여기서 확인할 수 있습니다.

EDB Postgres 데이터 어댑터 사용에 대한 자세한 내용은 EDB에 문의하거나 info@edbpostgres.com으로 이메일을 보내십시오.

Abbas Butt는 EnterpriseDB의 아키텍트입니다. 

Abbas Butt is an Architect at EnterpriseDB, currently focused on working as a core development team member of Postgres-XC.