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 を使用して各ノードのキャッシュ容量の使用量を監視し、それに応じてリソースを計画できます。