Presto 사용
  • PDF

Presto 사용

  • PDF

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

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

참고

Hive, Pig처럼 Presto도 OLAP 작업을 처리하기 위해 설계되었기 때문에 트랜젝션 중심의 전통적인 RDBMS를 대체할 수는 없습니다.

Presto 구성 요소

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

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

    • 클라이언트로부터 요청을 받음
    • SQL 구문 파싱, 쿼리 플래닝
    • 쿼리를 실행할 워커 노드 조정, 워커 노드의 활동 트래킹
  • Worker
    Worker는 Coordinator에서 전달받은 태스크를 수행하고, 데이터를 처리합니다. 태스크 수행 결과는 바로 Worker에서 클라이언트로 전달합니다.

쿼리 실행 과정

쿼리 실행 과정은 다음과 같습니다. (아래 이미지 화면 참고)

  1. Presto Worker 프로세스 시작 및 Coordinator의 Discovery 서버에 등록
    • Discovery 서버에 등록되어야 Coordinator가 태스크 실행에 Worker를 배정할 수 있음
  2. 클라이언트는 HTTP로 쿼리를 Coordinator에 전송
  3. Coordinator는 쿼리 플랜을 작성 및 Connector 플러그인에 스키마 데이터 요청
  4. Coordinator에서 Worker로 수행해야 할 태스크를 전달
  5. Worker는 Connector 플러그인을 통해 Data Sources로부터 데이터를 읽음
  6. Worker는 메모리에서 태스크를 수행
  7. 실행 결과를 바로 클라이언트에 전달

chadoop-4-7-001_ko.jpg

데이터 소스

  • Connector
    Presto에서 Connector는 Database에서 드라이버와 같은 역할을 수행합니다. 즉, Data Source에서 데이터를 읽어 올 수 있도록 Coordinator 또는 Worker와 Data Source 사이를 이어주는 역할을 합니다.
    Presto는 기본적으로 Hive, MySQL, Kafka 등 여러 Data Source에 대한 Connector를 제공합니다.

  • Catalog
    카탈로그는 Connector에 대한 마운트 포인트입니다. 모든 카탈로그는 특정 Connector와 관련되어 있습니다. Presto는 카탈로그에 마운트된 Connector를 통해서 데이터 소스에 접근할 수 있습니다. 예를 들어, Hive Connector로 Hive Warehouse에 접근하기 위해서는 /etc/presto/catalog 아래 Hive 카탈로그(hive.properties)를 구성하면 됩니다.

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

    카탈로그는 Presto configuration 디렉터리(/etc/presto/) 아래 config.properties에 정의되어 있습니다.

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

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

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

Presto 클러스터 사용

클러스터 생성

콘솔에서 클러스터 생성 시 클러스터 TypePresto로 선택하십시오.
클러스터 생성에 대한 자세한 내용은 클러스터 생성을 참고해 주십시오.

참고
  • Cloud Hadoop 1.3부터 Presto v0.240가 설치된 클러스터를 사용할 수 있습니다.

    cloudhadoop-create_ko

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

Ambari UI에서 Presto 서비스 확인

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

chadoop-4-7-003_ko.png

  • Summary: 컴포넌트가 설치된 호스트 확인
  • Configs: Presto 서비스의 configuration 변경
  • Quick Links: Presto Discovery UI
    • 이 링크를 통해서 접속하려면 터널링이 필요합니다. 콘솔에서 제공하는 Web UI 링크를 이용한 접속을 권장합니다. 자세한 내용은 Presto Discovery UI 접속을 참조해 주십시오.

주요 Configuration

  • jvm.properties
    Coordinator, Worker 서버에서 사용하는 JVM 옵션을 입력합니다. -Xmx옵션으로 JVM heap을 조정할 수 있습니다. 코디네이터 노드와 워커 노드의 스펙이 다를 수 있기 떄문에 메모리 설정을 분리해서 적용합니다. jvm.properties 구성은 아래처럼 역할별로 분리되어 있습니다. 실제 서버의 /etc/presto/conf경로 아래에는 동일한 파일 이름인 jvm.properties가 존재합니다.
    chadoop-4-8-005_ko.png

  • config.properties
    흔하지 않은 경우이지만, 필요하다면 config.properties도 Coordinator, Worker 역할별로 다르게 메모리를 설정할 수 있습니다. 주요 구성 항목의 정의는 아래와 같습니다.

항목 기본 값 설명
query.max-memory-per-node 1G - 하나의 쿼리가 Worker에서 사용할 수 있는 User 메모리의 최댓값
- 어떤 쿼리를 통해 각 Worker가 할당받은 메모리 값 중에서, 이 한계를 넘어선 것이 하나라도 있으면 이 쿼리 실행을 취소
query.max-memory 20G - 하나의 쿼리가 전체 클러스터에 걸쳐서 사용할 수 있는 메모리의 최댓값
- 어떤 쿼리를 통해 모든 워커 노드에 할당한 User 메모리의 합이 이 한계를 넘어서면 쿼리 실행을 취소
query.max-total-memory-per-node 2G - 하나의 쿼리가 전체 클러스터에 걸쳐서 사용할 수 있는 User/System 메모리의 최댓값
- 어떤 쿼리를 통해 모든 워커 노드에 할당한 User/System 메모리의 합이 이 한계를 넘어서면 쿼리 실행을 취소

chadoop-4-8-006_ko.png

주의

http-server.http.port를 변경할 경우 Coordinator와 Worker를 모두 동일하게 변경해야 합니다. 다른 포트를 지정하면 서로 통신할 수 없습니다.

  • node.properties
    Presto 데몬이 사용하는 로그 디렉터리, pid 디렉터리 등을 설정할 수 있습니다. 이 디렉터리를 변경하려면 각 서버에서 디렉터리의 소유자와 권한을 체크해야합니다.
    node.environment에서 현재 사용하는 환경 이름을 지정할 수 있습니다.

chadoop-4-8-007_ko.png

Presto CLI

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

  • Presto Coordinator 서버 접속
/usr/lib/presto/bin/presto-cli --server <COORDINATOR-HOST-IP>:8285
  • 사용 가능한 카탈로그 확인
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 별 보기] 를 통해 Hue Web UI에 접속할 수 있습니다. 자세한 내용은 Application별 보기를 참조해 주십시오.

cloudhadoop-access-webui_ko

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

chadoop-4-7-005_ko.png


이 글이 도움이 되었나요?