Presto(Trino) 사용
    • PDF

    Presto(Trino) 사용

    • PDF

    기사 요약

    Presto는 테라바이트, 페타바이트 단위의 데이터를 분산 쿼리를 사용하여 분석할 수 있는 툴입니다.
    HDFS 뿐만 아니라 Hive warehouse, RDBMS 등 다양한 소스로부터 데이터를 읽어올 수 있습니다.
    쿼리가 MapReduce Job으로 실행되는 Hive, Pig와 달리, Presto에는 별도의 쿼리 실행 엔진이 구현되어 있습니다. 단계별 결과를 디스크에 쓰지 않고 메모리에서 메모리로 데이터를 전달하는 구조이기 때문에 HDFS에 저장된 데이터를 Hive보다 빠르고 인터렉티브하게 분석할 수 있습니다. 따라서, Tableau 같은 BI Tool에는 Hive보다 Presto가 연동하기에 적합합니다.

    참고
    • Cloud Hadoop 1.9까지는 Presto 란 이름으로 사용되었고, Cloud Hadoop 2.0 에서는 Trino 라는 이름으로 사용됩니다.
    • Presto 또한 Hive, Pig처럼 OLAP 작업을 처리하기 위해 설계되었기 때문에 트랜젝션(Transaction) 중심의 전통적인 RDBMS를 대체할 수는 없습니다.

    Presto 구성 요소

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

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

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

    쿼리 실행 과정

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

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

    chadoop-4-7-001.png

    데이터 소스

    • 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)

    참고

    Ranger를 사용해 Catalog, Schema, Table 레벨에 대한 접근 권한을 제어할 수 있습니다. 자세한 내용은 Trino 접근 권한 관리를 참조해 주십시오.

    Presto 클러스터 사용

    클러스터 생성

    네이버 클라우드 플랫폼 콘솔에서 Cloud Hadoop 클러스터를 생성해 주십시오.
    클러스터 생성에 대한 자세한 내용은 클러스터 생성을 참고해 주십시오.

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

      cloudhadoop-create_ko

    • Cloud Hadoop 1.3에서는 클러스터를 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을 조정할 수 있습니다. Coordinator 노드와 Worker 노드의 스펙이 다를 수 있기 때문에 메모리 설정을 분리해서 적용합니다. jvm.properties 구성은 아래처럼 역할별로 분리되어 있습니다. 실제 서버의 /etc/presto/conf경로 아래에는 동일한 파일 이름인 jvm.properties가 존재합니다.
      chadoop-4-8-005_ko.png

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

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

    chadoop-4-8-006_ko.png

    주의

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

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

    chadoop-4-8-007_ko.png

    Presto CLI

    Presto CLI는 쿼리를 실행할 수 있는 반응형 셸(shell)을 제공합니다.
    Presto Clis 역할이 할당된 호스트에서는 모두 셸을 사용할 수 있습니다.
    Presto CLI에 사용에 대한 자세한 설명은 Presto CLI Documentation을 참고해 주십시오.

    • Presto Coordinator 서버 접속
    /usr/lib/presto/bin/presto-cli --server <COORDINATOR-HOST-IP>:8285
    
    참고

    Presto Coordinator 서버 접속 시 <COORDINATOR-HOST-IP>는 엣지 노드(e-001)의 Private IP 주소입니다. Ambari UI > Hosts 메뉴에서 확인할 수 있습니다.

    • 사용 가능한 카탈로그 확인
    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 데이터 분석하기 가이드에서 더 자세하게 설명합니다.

    Presto Discovery UI 접속

    Cloud Hadoop 콘솔에서 [Application 별 보기] 를 통해 Hue Web UI에 접속할 수 있습니다. 자세한 내용은 Application 별 보기를 참조해 주십시오.
    cloudhadoop-access-webui_ko

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


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

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.