Mac OSにPrestoをインストールして試してみる
BigQuery、Athenaに続いてこんどはPrestoを触ってみたので、記録を残しておきます。
Prestoとは?
インストールと設定
2.1. Deploying Presto — Presto 0.185 Documentation には tar ball と書かれていますが、brewでインストールが可能です。java >= 1.8 が必須。
brew install presto
これで、version 0.185(2017年10月現在)がインストールされます。 設定はほぼデフォルトですが、jvm.configでオプションを1つ無効化した記憶。
/usr/local/Cellar/presto/0.185/libexec/etc/jvm.config
-server -Xmx16G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError
起動は
presto-server run
で行います。
MySQLに接続してみる
Connectorさえあれば(つくれば)、どんなデータソースでも直接SQLでクエリを書けるというのがPrestoのウリの一つ。 (自分にとっては)最も手軽なMySQLを試してみます。
/usr/local/Cellar/presto/0.185/libexec/etc/catalog/mysql.properties
connector.name=mysql connection-url=jdbc:mysql://localhost:3306 connection-user=root connection-password=
これで準備はできたので、CLIをインストールして、prestoに接続します。
2.2. Command Line Interface — Presto 0.185 Documentation
./presto --server localhost:8080 --catalog mysql
以下、実際にworldデータベース に対して、クエリを打ってみた結果です。
presto:world> use world; presto:world> SHOW TABLES; Table ----------------- city country countrylanguage (3 rows) Query 20171013_134538_00010_ra2dz, FINISHED, 1 node Splits: 18 total, 18 done (100.00%) 0:00 [3 rows, 71B] [11 rows/s, 271B/s] presto:world> SELECT * FROM city LIMIT 10; id | name | countrycode | district | population ----+-------------------------------------+-------------+----------------------+------------ 1 | Kabul | AFG | Kabol | 1780000 2 | Qandahar | AFG | Qandahar | 237500 3 | Herat | AFG | Herat | 186800 4 | Mazar-e-Sharif | AFG | Balkh | 127800 5 | Amsterdam | NLD | Noord-Holland | 731200 6 | Rotterdam | NLD | Zuid-Holland | 593321 7 | Haag | NLD | Zuid-Holland | 440900 8 | Utrecht | NLD | Utrecht | 234323 9 | Eindhoven | NLD | Noord-Brabant | 201843 10 | Tilburg | NLD | Noord-Brabant | 193238 (10 rows) Query 20171013_134553_00011_ra2dz, FINISHED, 1 node Splits: 18 total, 18 done (100.00%) 0:01 [4.08K rows, 0B] [5.3K rows/s, 0B/s]
思ったこと
PrestoでMySQLにクエリを投げるのは比較的カンタンだった。
5.4. Hive Connector — Presto 0.185 Documentation もあり、Amazon S3にあるログに対してクエリを実行できるらしい。(試そうと思ったが、HadoopやらHiveやら事前準備が多く断念)
実際にプロダクションで使う場合には、セットアップ・運用が大変そうなので、Amazon EMRなどのマネージドサービスを使うのがよさそうです。