Cloud Hadoop에서 Presto 사용하기

목차 Presto Overview

Presto 클러스터 사용하기

이 페이지에서는 Presto 서비스에 대해 소개하고 Cloud Hadoop에서 Presto를 사용하는 방법을 설명합니다.

Presto Overview

이 섹션에서는 Presto가 어떻게 구성되어 있는지, 쿼리가 어떻게 실행되는지 설명합니다.

Presto는 TB, PB 단위의 데이터를 분산쿼리(distributed queries)를 사용하여 분석할 수 있는 툴입니다. HDFS뿐만 아니라 Hive Warehouse, RDBMS 등 다양한 소스로부터 데이터를 읽어올 수 있습니다.

쿼리가 MapReduce Job으로 실행되는 Hive, Pig와 달리, Presto에는 별도의 쿼리 실행엔진이 구현되어 있습니다. 단계별 결과를 Disk에 쓰지 않고 메모리에서 메모리로 데이터를 전달하는 구조여서, HDFS에 저장된 데이터를 Hive보다 빠르고 interactive하게 분석할 수 있습니다. 따라서 Tableau 같은 BI Tool에는 Hive보다 Presto가 연동하기 적합합니다.

Presto 또한 Hive, Pig처럼 OLAP 작업을 처리하기 위해 디자인되었기에, Transaction 중심의 전통적인 RDBMS를 대체할 수는 없습니다.

Components

Presto 서비스를 구성하는 컴포넌트는 크게 두 가지로, Coordinator, Worker가 있습니다. Coordinator는 Master 역할로 한 개, Worker는 Slave 역할로 여러 개 존재할 수 있습니다. Coordinator와 Worker, Wokrer 노드끼리 통신할 때는 REST API를 사용합니다.

1. Coordinator

Coordinator는 Presto 서비스의 중심으로 아래와 같은 역할을 수행합니다.

  • Client로부터 요청을 받음
  • SQL 구문 parsing, 쿼리 플래닝
  • 쿼리를 실행할 Worker 노드 조정, Worker 노드의 활동 트래킹

2. Worker

Worker는 Coordinator에서 전달받은 태스크를 수행하고, 데이터를 처리합니다. 태스크 수행 결과는 바로 Worker에서 Client로 전달합니다.

3. Client

Presto Coordinator에 요청을 보낼 수 있습니다.

쿼리 실행 과정

  1. Presto Worker 프로세스가 시작하면, Coordinator의 Discovery Server에 등록됩니다. Discovery Server에 등록되어야, Coordinator가 태스크 실행에 Worker를 배정할 수 있습니다.
  2. Client는 HTTP로 쿼리를 Coordinator에 전달합니다.
  3. Coordinator는 쿼리 플랜을 작성합니다. 이때, Connector Plugin에 스키마 데이터를 요청합니다.
  4. Coordinator에서 Worker로 수행해야 할 task를 전달합니다.
  5. Worker는 Connector Plugin을 통해서 Data Sources로부터 데이터를 읽어옵니다.
  6. Worker는 메모리에서 태스크를 수행합니다.
  7. 실행 결과를 바로 Client에 전달합니다.

Data Sources

Connector

Presto에서 Connector는 Database에서 Driver와 같은 역할을 수행합니다. 즉, Data Source에서 데이터를 읽어 올 수 있도록 Coordinator 또는 Worker와 Data Source 사이를 이어주는 역할을 합니다.

Presto는 기본적으로 Hive, MySQL, Kafka 등 여러 Data Source에 대한 Connector를 제공합니다.

모든 Catalog는 특정 Connector와 관련되어 있습니다.

Catalog

Catalog는 Connector에 대한 마운트 포인트입니다. Presto는 Catalog에 마운트된 Connector를 통해서 데이터 소스에 접근할 수 있습니다. 예를 들어, Hive Connector로 Hive warehouse에 접근하기 위해서는 /etc/presto/catalog 아래 Hive Catalog(hive.properties)를 구성하면 됩니다.

Presto 쿼리에서는 하나 이상의 Catalog를 사용할 수 있습니다. 즉, 하나의 쿼리에서 여러 개의 Data Source를 사용할 수 있습니다.

Catalog는 Presto configuration directory(/etc/presto/) 아래 config.properties에 정의되어 있습니다.

Schema

스키마(Schema)는 테이블을 정리하기 위한 방법입니다. 하나의 카탈로그와 스키마로 한번에 쿼리를 수행할 수 있는 대상인, 테이블 세트를 정의할 수 있습니다.

Presto로 Hive나 RDBMS에 접근할 때 스키마는 여기서 대응되는 개념인 데이터베이스와 똑같이 생각할 수 있습니다. 이 밖에 다른 데이터 소스에서는 스키마를 구성하기 위해서, 나름대로 테이블을 조직화할 수 있습니다.

Table

RDBMS에서의 테이블 개념과 동일합니다.

Presto에서 Table을 참조할 때에는 fully-qualified 즉, 카탈로그, 스키마, 테이블명을 온점(.)으로 분리하여 명시해야 합니다. (예: hive.samples.t1)

Presto 클러스터 사용하기

이 섹션에서는 Cloud Hadoop에서 Presto 타입의 클러스터를 생성하고 사용하는 방법에 대해 설명합니다.

클러스터 생성

Cloud Hadoop 1.1부터 Presto v0.214가 설치된 클러스터를 사용할 수 있습니다. 아래와 같이 선택하고 다음 단계를 진행합니다. 다음 과정은 클러스터 생성과 동일합니다.

그리고 Presto 타입으로 클러스터를 생성하지 않았더라도, Amabari Add Service를 이용해서 Presto를 추가할 수 있습니다.

Ambari UI에서 Presto 서비스 확인

Presto를 설치하면, Ambari UI에서 다음과 같이 서비스를 확인할 수 있습니다. 이 페이지에서, 서비스의 각 컴포넌트를 시작, 중지할 수 있습니다.

  • Summary: 각 컴포넌트가 어느 호스트에 설치됐는지 볼 수 있습니다.
  • Configs: Presto 서비스 configuration을 변경할 수 있습니다.
  • Quick Links: Presto Discovery UI입니다. 이 링크를 통해서 접속하려면 터널링이 필요합니다. 공인 IP를 통한 접속을 권장합니다.

주요 Configuration

config.properties

쿼리 성능을 튜닝하는 데 유용한 파라미터입니다.

  • query.max-memory: 한 개의 쿼리가 사용할 수 있는 메모리 합의 최댓값. 여기서 합은, 쿼리가 분산되어서 실행될 때 실행되는 모든 노드에서 사용할 수 있는 메모리의 합.
  • query.max-memory-per-node: 한 개의 쿼리가 하나의 노드에서 사용할 수 있는 메모리의 최댓값.

jvm.config

  • content: Coordinator, Worker 서버에서 사용하는 JVM option

node.properties

  • node.environment: environment 이름

Presto CLI

Presto CLI는 쿼리를 실행할 수 있는 반응형 셸을 제공합니다. Preto Clis 역할이 할당된 호스트에서는 모두 셸을 사용할 수 있습니다.

Presto Coordinator 서버에 접속합니다.

/usr/lib/presto/bin/presto-cli --server <COORDINATOR-HOST-IP>:8285

사용할 수 있는 Catalog를 확인할 수 있습니다.

presto> show catalogs;
 Catalog
---------
 system
(1 row)

Query 20190430_020419_00001_j79dc, FINISHED, 2 nodes
Splits: 36 total, 36 done (100.00%)
0:07 [0 rows, 0B] [0 rows/s, 0B/s]

데이터 소스를 추가해서 쿼리를 수행하는 방법은 Presto로 Hive Warehouse 데이터 분석하기에서 더 자세하게 설명합니다.

그 외에 사용할 수 있는 CLI 옵션은 아래와 같습니다.

--catalog <catalog>
    Default catalog to connect to

--client-request-timeout <client request timeout>
    Client request timeout (default: 2m)

--debug
    Enable debug information

--enable-authentication
    Enable client authentication

--execute <execute>
    Execute specified statements and exit

-f <file>, --file <file>
    Execute statements from file and exit

-h, --help
    Display help information

--keystore-password <keystore password>
    The password for the keystore. This must match the password
    specified when creating the keystore

--keystore-path <keystore path>
    The location of the Java Keystore file that will be used to
    secure TLS

--krb5-config-path <krb5 config path>
    Kerberos config file path (default: /etc/krb5.conf)

--krb5-credential-cache-path <krb5 credential cache path>
    Kerberos credential cache path

--krb5-disable-remote-service-hostname-canonicalization
    Disable service hostname canonicalization using the DNS reverse
    lookup

--krb5-keytab-path <krb5 keytab path>
    Kerberos key table path (default: /etc/krb5.keytab)

--krb5-principal <krb5 principal>
    Kerberos principal to be used

--krb5-remote-service-name <krb5 remote service name>
    Remote peer's kerberos service name

--log-levels-file <log levels file>
    Configure log levels for debugging using this file

--output-format <output-format>
    Output format for batch mode [ALIGNED, VERTICAL, CSV, TSV,
    CSV_HEADER, TSV_HEADER, NULL] (default: CSV)

--schema <schema>
    Default schema

--server <server>
    Presto server location (default: localhost:8080)

--session <session>
    Session property (property can be used multiple times; format is
    key=value; use 'SHOW SESSION' to see available properties)

--socks-proxy <socks-proxy>
    SOCKS proxy to use for server connections

--source <source>
    Name of source invoking the query (default: presto-cli)

--truststore-password <truststore password>
    The password for the truststore. This must match the password you
    specified when creating the truststore

--truststore-path <truststore path>
    The location of the Java Truststore file that will be used to
    secure TLS

--user <user>
    Username

--version
    Version of the CLI

Presto Discovery UI

Cloud Hadoop 콘솔 상단에 Application-Specific Views를 통해 Presto Discovery UI에 접속할 수 있습니다.

Presto 서비스에 대한 전체적인 상태를 알 수 있습니다. 쿼리 기록도 조회할 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...