PrestoをDockerで試してみる

#presto#docker

Prestoを学ぶ必要が出てきたので、気軽に試せる環境をDockerで作ってみた。

prestosql/prestoというDockerイメージを使う。データソースも同じくDockerコンテナとして起動してDocker Composeで接続させる。

設定

# docker-compose.yml
version: "3.7"
services:
  presto:
    image: prestosql/presto:latest
    ports:
      - 8080:8080
    volumes:
      - ./config/presto:/etc/presto
    depends_on:
      - mysql
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./config/mysql/conf.d:/etc/mysql/conf.d
      - ./config/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
      - ./config/mysql/seed:/seed
# /etc/presto/catalog/mysql.properties
connector.name=mysql
connection-url=jdbc:mysql://mysql:3306
connection-user=root
connection-password=password
  • Prestoコンテナは/etc/prestoにある設定ファイルを使うので、ローカルからマウントしておく。ただし、すべての設定ファイルが必要なので、コンテナ内にあるデフォルトの設定ファイルもコピーしておく。
  • #65で書いた、MySQLコンテナの起動時にスキーマやシードデータを初期化するテクニックを使っている。
  • MySQLの接続情報はカタログの設定ファイルで指定する。

試してみる

% docker-compose up -d
% docker-compose exec presto presto
presto> SELECT * FROM mysql.hello_presto.pokedex;
 pokemon_id |   name
------------+-----------
          1 | bulbasour
          2 | ivysaur
          3 | venusaur
(3 rows)

Query 20200125_110251_00001_p3vcs, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:01 [3 rows, 0B] [4 rows/s, 0B/s]

今回はMySQLコネクタを試してみたけど、カタログファイルを追加することで他のデータソースにも対応できる。