Overview
presto-server-rpmで生成されるrpmパッケージ/tar.gz
は現在700MBを超えています(v316ベース)。
一般的な環境であればprestoのコネクターは1つか2つぐらいしか使っていないと思います。
その他の利用していないコネクターを削除したrpm/tar.gz
を作成すれば、
PrestoをDocker環境で利用しているのであればDockerコンテナのサイズが削減されデプロイの高速化などが期待できます。
rpm/tar.gzの中身を確認する
まずは、現在のデフォルトの状態でrpm/tar.gz
をビルドして内訳をみてみましょう。
❯ du -hs presto-server-rpm/target/presto-server-rpm-316-SNAPSHOT.x86_64.rpm presto-server/target/presto-server-316-SNAPSHOT.tar.gz 704M presto-server-rpm/target/presto-server-rpm-316-SNAPSHOT.x86_64.rpm 704M presto-server/target/presto-server-316-SNAPSHOT.tar.gz
次に、tar.gz
ファイルを展開してどのコネクターが容量を占めているか確認してみます。
今回はサイズの大きい上位10件を表示してみます。
% gdu presto-server-316-SNAPSHOT/plugin/* | sort -nr | gnumfmt --to=iec --format "%5fM" --to-unit=K |head -n 10 118M presto-server-316-SNAPSHOT/plugin/phoenix 115M presto-server-316-SNAPSHOT/plugin/hive-hadoop2 111M presto-server-316-SNAPSHOT/plugin/raptor 51M presto-server-316-SNAPSHOT/plugin/accumulo 40M presto-server-316-SNAPSHOT/plugin/presto-elasticsearch 32M presto-server-316-SNAPSHOT/plugin/kafka 25M presto-server-316-SNAPSHOT/plugin/geospatial 23M presto-server-316-SNAPSHOT/plugin/ml 21M presto-server-316-SNAPSHOT/plugin/kudu 19M presto-server-316-SNAPSHOT/plugin/cassandra
phoenix
, raptor
などが100MB超を占めています。 今回はこれらのコネクターをrpm/tar.gz
を除外してみます。
presto.xmlを編集する
具体的にどのファイルを変更すれば不要なコネクターがrpmに入らないかというとpresto.xml
を編集します。
How can I exclude 1 particular plugin in final presto build - Google グループ
今回の変更点はこちらです。
diff --git presto-server/src/main/provisio/presto.xml presto-server/src/main/provisio/presto.xml index aa9282ea69..9f065b0b06 100644 --- presto-server/src/main/provisio/presto.xml +++ presto-server/src/main/provisio/presto.xml @@ -50,60 +50,12 @@ </artifact> </artifactSet> - <artifactSet to="plugin/cassandra"> - <artifact id="${project.groupId}:presto-cassandra:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/example-http"> - <artifact id="${project.groupId}:presto-example-http:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - <artifactSet to="plugin/hive-hadoop2"> <artifact id="${project.groupId}:presto-hive-hadoop2:zip:${project.version}"> <unpack /> </artifact> </artifactSet> - <artifactSet to="plugin/memory"> - <artifact id="${project.groupId}:presto-memory:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/blackhole"> - <artifact id="${project.groupId}:presto-blackhole:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/kafka"> - <artifact id="${project.groupId}:presto-kafka:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/kudu"> - <artifact id="${project.groupId}:presto-kudu:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/atop"> - <artifact id="${project.groupId}:presto-atop:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/ml"> - <artifact id="${project.groupId}:presto-ml:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - <artifactSet to="plugin/geospatial"> <artifact id="${project.groupId}:presto-geospatial:zip:${project.version}"> <unpack /> @@ -116,42 +68,6 @@ </artifact> </artifactSet> - <artifactSet to="plugin/phoenix"> - <artifact id="${project.groupId}:presto-phoenix:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/postgresql"> - <artifact id="${project.groupId}:presto-postgresql:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/redshift"> - <artifact id="${project.groupId}:presto-redshift:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/sqlserver"> - <artifact id="${project.groupId}:presto-sqlserver:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/raptor"> - <artifact id="${project.groupId}:presto-raptor-legacy:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/redis"> - <artifact id="${project.groupId}:presto-redis:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - <artifactSet to="plugin/tpch"> <artifact id="${project.groupId}:presto-tpch:zip:${project.version}"> <unpack /> @@ -170,33 +86,9 @@ </artifact> </artifactSet> - <artifactSet to="plugin/mongodb"> - <artifact id="${project.groupId}:presto-mongodb:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/localfile"> - <artifact id="${project.groupId}:presto-local-file:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - - <artifactSet to="plugin/accumulo"> - <artifact id="${project.groupId}:presto-accumulo:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> - <artifactSet to="plugin/presto-thrift"> <artifact id="${project.groupId}:presto-thrift:zip:${project.version}"> <unpack /> </artifact> </artifactSet> - - <artifactSet to="plugin/presto-elasticsearch"> - <artifact id="${project.groupId}:presto-elasticsearch:zip:${project.version}"> - <unpack /> - </artifact> - </artifactSet> </runtime>
今回は phoenix
以外にも不要なプラグインも削除しています。
いくつか自分が使っていないプラグインを削除してどれぐらいファイルサイズを削除できるかみてみましょう。
$ ./mvnw clean install package -DskipTests -Dair.check.skip-all=true -pl presto-server,presto-server-rpm
全モジュールを再ビルドすると20分ぐらいかかるのでpresto-server,presto-server-rpm
モジュールだけを指定してmavenビルドします。
$ du -hs presto-server-rpm/target/presto-server-rpm-316-SNAPSHOT.x86_64.rpm presto-server/target/presto-server-316-SNAPSHOT.tar.gz 256M presto-server-rpm/target/presto-server-rpm-316-SNAPSHOT.x86_64.rpm 256M presto-server/target/presto-server-316-SNAPSHOT.tar.gz
期待通り、rpm/tar.gz
のサイズが小さくなっていますね。 今回の変更で半分以下のファイルサイズまで容量を削減出来ました。
一応、ファイルを展開して中身を確認してみましょう。
% gdu presto-server-316-SNAPSHOT/plugin/* | sort -nr | gnumfmt --to=iec --format "%5fM" --to-unit=K |head -n 10 115M presto-server-316-SNAPSHOT/plugin/hive-hadoop2 25M presto-server-316-SNAPSHOT/plugin/geospatial 17M presto-server-316-SNAPSHOT/plugin/presto-thrift 14M presto-server-316-SNAPSHOT/plugin/resource-group-managers 13M presto-server-316-SNAPSHOT/plugin/mysql 11M presto-server-316-SNAPSHOT/plugin/jmx 11M presto-server-316-SNAPSHOT/plugin/session-property-managers 9M presto-server-316-SNAPSHOT/plugin/password-authenticators 6M presto-server-316-SNAPSHOT/plugin/tpcds 5M presto-server-316-SNAPSHOT/plugin/tpch
しっかり、指定したモジュールのプラグインだけが残っています。
このようにして不要なコネクターを削除することで不要なファイルサイズを削減出来ました。
まとめ
Dockerでprestoを使うならこういった形でコンテナサイズを削減してデプロイを高速化しておくと良いでしょう。