リソースヒント

リソースヒントを使用すると、パイプラインの作成者は計算リソースの要件に関する情報をランナーに提供できます。 リソースヒントを使用して、特定の変換またはパイプライン全体の要件を定義できます。 ランナーはリソースヒントを解釈する責任があり、ランナーはサポートされていないヒントを無視できます。

リソースヒントはネストできます。 たとえば、複合変換のサブ変換にリソースヒントを指定でき、その複合変換にもリソースヒントを適用できます。 デフォルトでは、最も内側のヒントが優先されます。 ただし、ヒントはカスタムの調整動作を定義できます。 たとえば、`min_ram`は、パイプラインの特定のステップに設定されたすべての`min_ram`値の最大値を取ります。

利用可能なヒント

現在、Beamは次のリソースヒントをサポートしています

リソースヒントの解釈と実行は、ランナーによって異なる場合があります。 実装例については、Dataflowリソースヒントを参照してください。

パイプラインのリソースヒントの指定

パイプライン全体にリソースヒントを指定するには、パイプラインオプションを使用できます。 次のコマンドは、基本的な構文を示しています。

mvn compile exec:java -Dexec.mainClass=com.example.MyPipeline \
    -Dexec.args="... \
                 --resourceHints=min_ram=<N>GB \
                 --resourceHints=accelerator='hint'" \
    -Pdirect-runner
python my_pipeline.py \
    ... \
    --resource_hints min_ram=<N>GB \
    --resource_hints accelerator="hint"

変換のリソースヒントの指定

setResourceHintsを使用して、パイプライン変換にプログラムでリソースヒントを設定できます。

PTransforms.with_resource_hintsを使用して、パイプライン変換にプログラムでリソースヒントを設定できます(ResourceHintも参照)。

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator("type:nvidia-tesla-k80;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))
pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-k80;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")