About Me

My photo
Software Engineer at Starburst. Maintainer at Trino. Previously at LINE, Teradata, HPE.

2017-05-22

Setup Presto Dev Environment

半年ほど前から密かにPrestoにコントリビュートしているんですが、メモも兼ねて自分が送ったPRや開発のTipsについて書いていきたいと思います。開発言語はJavaなのと、直すべきところも多々あるので比較的コントリビュートしやすいOSSな気がします。次に開発環境ですが、Windowsはサポートされていません。頑張れば出来るかもしれませんが、スタイルチェッカーで文字コード等々が弾かれエラーになります。俺はッWindowsを愛しているんだッ…!という方はこちらのIssueに対応しましょうWindows Support #2351。約2年以上経過していますが、0/12という進捗率です…。僕は基本Macで時々VM内のUbuntu上で開発しています。後々詳しく書きますが、Dockerを使うテストがあるので、その時はやはりUbuntu上で動かすことが多いです。

準備としてIntellij IDEAとPrestoをローカルにクローン/ダウンロードしておきます。 最新のRequirmentsはこちらをご覧ください。

1 Terminalからリポジトリの直下でビルド 環境によっては数十分かかるかもしれないので気長に待ちましょう。

mvn clean install -DskipTests

2 IDEA上でプロジェクトをImport Intellij IDEAを起動し、Import Projectでリポジトリ直下のpom.xmlを選択します。そこから先は適当にNextを連打し、JDKの選択画面では1.8のパスを選択します。

3 IDEA上でPrestoサーバーを起動 プロジェクトのフォルダで以下のファイルまで移動し、右クリックでCreate ‘PrestoServer.main()’…とした後に、VM OptionsとWorking directoryを入力します。

presto-main/src/main/java/com/facebook/presto/server/PrestoServer.java
VM Options: -ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties
Working directory: $MODULE_DIR$

これでRunもしくはDebugするとPrestoのサーバー側が起動します。起動しているサーバーに接続するためには下記のパスにあるjarを実行することで接続できます。

presto-cli/target/presto-cli-*-SNAPSHOT-executable.jar

ちなみに、サーバー側の設定ファイルはpresto-main/etc配下に存在します。master上の設定ファイルでは全部のコネクタが記載されていないので、もしcatalog内に記載されていないコネクタでデバッグしたい時などはconfig.propertiesを修正し、catalog配下にpropertiesファイルを追加する必要があります。

なおテストですが、全部を回すとなると環境にもよりますが1時間以上はかかるかと思います。Travis CIの無料プランで大体1時間ちょっと、Presto側では30分ちょっとで終わります。あくまで自分の場合はですが、ローカルではクラス単位、たまにコネクタ単位でテストしたらmvn clean install -DskipTestsでスタイルチェック後に、GitHubにPushしてTravis CI上で全テストを回すようにしています。presto-product-testsはそれなりの頻度で失敗するので、影響がなさそうな部分を直したのに失敗している時はログを見ないでその部分だけRestartをかけちゃってます。