Alluxio キャッシュサービス¶
概要¶
Presto クエリレイテンシを改善するための一般的な最適化として、ワーキングセットをキャッシュして、リモートデータソースからの不要なI/Oや遅いネットワークを経由するI/Oを回避することがあります。このセクションでは、Presto のキャッシュレイヤーとして Alluxio を活用する方法について説明します。
Alluxio ファイルシステム は、HDFS や AWS S3、GCP、Azure Blob ストレージなどのオブジェクトストレージの上に構築された、独立した分散型キャッシングファイルシステムとして Presto Hive コネクタに機能を提供します。ユーザーは、ファイルシステムインターフェースを通じてキャッシュの使用状況を理解し、キャッシュを明示的に制御できます。たとえば、Alluxio ディレクトリ内のすべてのファイルをプリロードして Presto クエリのためのキャッシュをウォームアップしたり、キャッシュされたデータのTTL(存続時間)を設定してキャッシュ容量を再利用できます。
Presto Hive コネクタは、他の永続的なストレージシステムの上に構築された、Hadoop と互換性のあるファイルシステムとしてAlluxioFileSystemに接続できます。
設定¶
まず、Hive コネクタを使用するように ${PRESTO_HOME}/etc/catalog/hive.properties
を構成します。
connector.name=hive-hadoop2
hive.metastore.uri=thrift://localhost:9083
次に、すべての Presto サーバーの ${PRESTO_HOME}/plugin/hive-hadoop2/
に Alluxio クライアントJAR が存在することを確認します。存在しない場合は、Alluxio バイナリをダウンロード し、tarball を ${ALLUXIO_HOME}
に展開し、Alluxio クライアントJAR ${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar
をこのディレクトリにコピーします。Presto サービスを再起動します。
$ ${PRESTO_HOME}/bin/launcher restart
第三に、Presto にサービスを提供する際に Hive Metastore が Alluxio ファイルシステムに接続するように構成します。${HIVE_HOME}/conf/hive-env.sh
を編集して、Hive クラスパスに Alluxio クライアントJAR を含めます。
export HIVE_AUX_JARS_PATH=${ALLUXIO_HOME}/client/alluxio-<VERSION>-client.jar
その後、Hive Metastore を再起動します。
$ ${HIVE_HOME}/hcatalog/sbin/hcat_server.sh start
クエリ¶
基本的な構成が完了したら、Presto は alluxio://
アドレスを指すテーブルを使用して Alluxio ファイルシステムにアクセスできるようになります。Hive コネクタ のドキュメントを参照して、Presto で Alluxio ファイルシステムを構成する方法を確認してください。簡単な例を以下に示します。
$ cd ${ALLUXIO_HOME}
$ bin/alluxio-start.sh local -f
$ bin/alluxio fs mount --readonly /example \
s3://apc999/presto-tutorial/example-reason/
前のステップで開始したサーバーに接続する Presto CLI を開始します。
presto-cli-0.289-executable.jar をダウンロードし、presto
に名前を変更し、chmod +x
で実行可能にしてから実行します。
$ ./presto --server localhost:8080 --catalog hive --debug
presto> use default;
USE
Alluxio にマウントされたファイルに基づいて新しいテーブルを作成します。
presto:default> DROP TABLE IF EXISTS reason;
DROP TABLE
presto:default> CREATE TABLE reason (
r_reason_sk integer,
r_reason_id varchar,
r_reason_desc varchar
) WITH (
external_location = 'alluxio://localhost:19998/example',
format = 'PARQUET'
);
CREATE TABLE
Alluxio 上で新しく作成されたテーブルをスキャンします。
presto:default> SELECT * FROM reason LIMIT 3;
r_reason_sk | r_reason_id | r_reason_desc
-------------+------------------+---------------------------------------------
1 | AAAAAAAABAAAAAAA | Package was damaged
4 | AAAAAAAAEAAAAAAA | Not the product that was ordred
5 | AAAAAAAAFAAAAAAA | Parts missing
基本操作¶
Alluxio ファイルシステムを使用することで、このアプローチは次の機能をサポートします。
プリロード:ユーザーは、データアクセスパターンに基づいてデータを透過的にキャッシュすることに加えて、alluxio fs distributedLoad などのコマンドラインを使用して、ワーキングセットをAlluxioにプロアクティブにロードできます。
読み取り/書き込みの種類とデータポリシー:ユーザーは、Alluxio から読み取る際とAlluxio に書き込む際のPrestoの読み取りと書き込みモードをカスタマイズできます。例:特定の場所から読み取る際にキャッシュデータをスキップしてキャッシュスラッシングを回避するようにPrestoに指示したり、alluxio fs setTtl を使用して特定の場所のファイルにTTLを設定します。
ワーキングセットの確認:ユーザーは、どのファイルがキャッシュされているかを確認して、Prestoのパフォーマンスを理解し、最適化できます。たとえば、Alluxioコマンドラインの出力 alluxio fs ls を確認したり、Alluxio WebUI で対応するファイルを参照できます。
リソース使用率の確認:システム管理者は、alluxio fsadmin report を使用して各ノードのキャッシュ容量の使用量を監視し、それに応じてリソースを計画できます。