Trino での耐障害性実行 - Amazon EMR

Trino での耐障害性実行

耐障害性実行は、クラスターがクエリの失敗を軽減するために使用できる Trino のメカニズムです。これを実現するには、クエリやそのコンポーネントタスクが失敗したときに再試行します。耐障害性実行が有効になると、中間交換データがスプールされ、クエリの実行中にワーカーが停止したり、その他の障害が発生したりした場合に、別のワーカーがそのデータを再利用できます。

Trino での耐障害性実行について詳しくは、Trino ブログの「Project Tardigrade delivers ETL at Trino speeds to early users」を参照してください。

構成

耐障害性実行はデフォルトでは無効になっています。この機能を有効にするには、以下のように、trino-config 分類の retry-policy 設定プロパティを、必要な再試行ポリシーに基づいて、QUERY または TASK に設定します。

{"classification": "trino-config", "properties": { "retry-policy": "QUERY" } }

QUERY 再試行ポリシーは、ワーカーノードでエラーが発生したときに自動的にクエリを再試行するよう Trino に指示します。Trino クラスターのワークロードの大半が多数の小さなクエリで構成されている場合は、QUERY 再試行ポリシーを使用することをお勧めします。

TASK 再試行ポリシーは、障害発生時に個々のクエリタスクを再試行するよう Trino に指示します。Trino が大量のバッチクエリを実行する場合にはこのポリシーをお勧めします。クラスターは、クエリ全体を再試行するよりも、クエリ内の小さなタスクの方がより効率的に再試行できます。

交換マネージャー

交換マネージャーは、耐障害性実行のためにスプールされたデータを保存および管理します。外部ストレージを使用して、メモリ内のバッファサイズを超えてオーバーフローしたデータを保存します。スプールされたデータを Amazon S3、Amazon S3 互換システム、HDFS などの指定された場所に保存するファイルシステムベースの交換マネージャーを設定できます。

Amazon EMR リリース 6.9.0 以降には、交換マネージャーを設定するための trino-exchange-manager 分類が含まれています。これらのリリースでは、HDFS によるスプールもサポートされています。

交換マネージャーの設定

trino-exchange-manager 設定分類を使用して交換マネージャーを設定します。この分類により、コーディネーターとすべてのワーカーノードに内部的に etc/exchange-manager.properties 設定ファイルが作成されます。またこの分類により、exchange-manager.name 設定プロパティは filesystem に設定されます。

デフォルトでは、Amazon EMR リリース 6.9.0 以降は HDFS を交換マネージャーとして使用します。HDFS は Amazon EMR EC2 クラスターで使用でき、スプールはデフォルトで trino-exchange/ ディレクトリで行われます。デフォルトの設定を使用するには、次の設定を行います。

{"Classification": "trino-exchange-manager" }

カスタムの場所を指定する場合は、trino-exchange-manager 分類で次のプロパティを設定します。

  • exchange.use-local-hdfstrue に設定します。

  • exchange.base-directories を HDFS 内のカスタムディレクトリの場所 (例: exchange.base-directories=/exchange) に設定します。カスタムディレクトリがまだ HDFS にない場合は、Amazon EMR によって作成されます。

HDFS 交換マネージャーの設定

内部テストの結果によると、他のクラウドベースのファイルシステムと比較してクエリパフォーマンスを向上させるには、ローカル HDFS にスプールすることをお勧めします。HDFS を使用する交換マネージャーには、次の設定を行うことができます。

構成 説明 デフォルト設定

exchange.hdfs.block-size

HDFS ストレージのブロックサイズ

4 MB

hdfs.config.resources

HDFS を設定するファイルパスのリスト

exchange.use-local-hdfstrue の場合は core-site.xmlhdfs-site.xml ファイルへのパスを使用し、それ以外の場合は null

その他の耐障害性実行設定プロパティ、および Amazon S3 またはその他の Amazon S3 互換システムをスプール用に設定する方法については、Trino ドキュメントの「Fault-tolerant execution」ページを参照してください。

考慮事項と制約事項

  • 耐障害性実行を有効にすると、retry-policy が設定されているときに write をサポートしていないコネクタの write 操作は無効になります。Amazon EMR リリース 6.9.0 では、Delta Lake、Hive および Iceberg の各コネクタは retry-policy による write 操作をサポートしています。

  • 交換マネージャーを使用して高コストの I/O 操作を実行すると、交換マネージャーが中間データを外部ストレージにスプールする間、クエリのパフォーマンスが低下する可能性があります。