Alluxio SDK Cache

概要

Prestoは、Hiveコネクタを使用してクエリレイテンシを削減するために、ビルトインのAlluxio SDKキャッシュによる入力データのキャッシングをサポートしています。このビルトインキャッシュは、構成可能な容量と場所を持つ各ワーカーのローカルストレージ(SSDなど)を利用します。内部動作とレイテンシ改善のベンチマーク結果を理解するには、この記事をお読みください。これはリードキャッシュであり、ユーザーには完全に透過的であり、個々のPrestoワーカーによって完全に管理されることに注意してください。カスタマイズされたデータキャッシングポリシーを使用して、読み書きワークロードのための独立した分散キャッシュサービスをPrestoに提供するには、Alluxio Cache Serviceを参照してください。

設定

Alluxio SDKキャッシュの有効化は非常に簡単です。etc/catalog/hive.propertiesに以下の設定を含めて、Prestoコーディネーターとワーカーを再起動してください。

hive.node-selection-strategy=SOFT_AFFINITY
cache.enabled=true
cache.type=ALLUXIO
cache.alluxio.max-cache-size=500GB
cache.base-directory=/tmp/alluxio-cache

上記の例の設定では、

  • hive.node-selection-strategy=SOFT_AFFINITYは、Prestoスケジューラに、意味のあるデータキャッシングの有効性を可能にするワーカーへのタスクのスケジューリング時にデータアフィニティを考慮するように指示します。この設定プロパティのデフォルトはNO_PREFERENCEであり、SDKキャッシュはSOFT_AFFINITYに設定されている場合にのみ有効になります。データアフィニティに影響を与える可能性のあるコーディネーターのその他の設定には、node-scheduler.max-pending-splits-per-task(タスクあたりの最大保留中のスプリット数)とnode-scheduler.max-splits-per-node(ノードあたりの最大スプリット数)があります。

  • cache.enabled=trueはSDKキャッシュをオンにし、cache.type=ALLUXIOはそれをAlluxioに設定します。

  • cache.alluxio.max-cache-size=500GBはストレージ容量を500GBに設定します。

  • cache.base-directory=/tmp/alluxio-cacheは、ローカルディレクトリ/tmp/alluxio-cacheを指定します。このPrestoサーバーは、このローカルディレクトリへの読み取りと書き込みの両方の権限を持っている必要があることに注意してください。

アフィニティスケジューリングが有効になっている場合、特定のファイルセクションに優先ノードのセットが割り当てられます。デフォルトのファイルセクションサイズは256MBです。たとえば、ファイルサイズが512MBの場合、2つの異なるアフィニティプリファレンスが割り当てられます。

  • [0MB..256MB] -> NodeA, NodeB

  • [256MB+1B..512MB] -> NodeC, NodeD

セクションは、スプリットの開始オフセットに基づいて選択されます。最初のバイトが最初のセクションにあるスプリットは、NodeAまたはNodeBでスケジュールされることが優先されます。

hive.affinity-scheduling-file-section-size設定プロパティまたはaffinity_scheduling_file_section_sizeセッションプロパティを設定して、セクションのサイズを変更します。

モニタリング

このAlluxio SDKキャッシュはユーザーにとって完全に透過的です。キャッシュが機能していることを確認するには、cache.base-directoryで設定されたディレクトリを確認し、そこに一時ファイルが作成されているかどうかを確認できます。さらに、Alluxioはキャッシュ関連の操作を実行している間にさまざまなJMXメトリックをエクスポートします。システム管理者は、次のメトリックを確認することで、クラスタ全体でのキャッシュの使用状況を監視できます。

  • Client.CacheBytesEvicted: クライアントキャッシュから削除されたバイトの総数。

  • Client.CacheBytesReadCache: クライアントキャッシュから読み取られたバイトの総数(例:キャッシュヒット)。

  • Client.CacheBytesRequestedExternal: ユーザーが読み取りを要求したバイトの総数で、キャッシュミスが発生しました。この数は、チャンク読み取りのため、Client.CacheBytesReadExternalよりも小さくなる可能性があります。

  • Client.CacheHitRate: (キャッシュから読み取られたバイト数)/(要求されたバイト数)で測定されたヒット率。

  • Client.CacheSpaceAvailable: クライアントキャッシュで使用可能なバイト数。

  • Client.CacheSpaceUsed: クライアントキャッシュで使用されているバイト数。

利用可能なメトリックの完全なリストについては、Alluxioクライアントメトリックを参照してください。