Partager via


Informations de référence sur les stratégies de calcul

Cet article sert de référence pour les définitions de stratégie de calcul. Les articles incluent une référence relative aux attributs de stratégie disponibles et aux types de limitation. Vous pouvez également référencer des exemples de stratégies pour les cas d’usage courants.

Présentation des définitions de stratégie.

Les définitions de stratégie sont des règles de stratégie individuelles exprimées dans le format JSON. Une définition peut ajouter une règle à l’un des attributs contrôlés avec l’API Clusters. Par exemple, ces définitions définissent une heure d’arrêt automatique par défaut, interdisent aux utilisateurs d’utiliser des pools et appliquent l’utilisation de Photon :

{
   "autotermination_minutes" : {
    "type" : "unlimited",
    "defaultValue" : 4320,
    "isOptional" : true
  },
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "runtime_engine": {
    "type": "fixed",
    "value": "PHOTON",
    "hidden": true
  }
}

Il ne peut y avoir qu’une seule limitation par attribut. Le chemin d’accès d’un attribut reflète le nom de l’attribut d’API. Pour les attributs imbriqués, le chemin concatène leurs noms à l’aide de points. Les attributs qui ne sont pas définis dans une définition de stratégie ne sont pas limités.

Attributs pris en charge

Les stratégies prennent en charge tous les attributs contrôlés avec l’API Clusters. Le type de restrictions que vous pouvez apporter aux attributs peut varier selon les paramètres en fonction de leur type et de leur relation avec les éléments de l’interface utilisateur. Vous ne pouvez pas utiliser de stratégies pour définir des autorisations de calcul.

Vous pouvez également utiliser des stratégies pour définir les le nombre maximal d’Unités Databricks (DBU) par heure et le type de cluster. Consultez Chemins d’accès des attributs virtuels.

Le tableau suivant répertorie les chemins des attributs de stratégie pris en charge :

Chemin de l’attribut Type Description
autoscale.max_workers nombre facultatif En cas de masquage, supprime le champ du nombre maximal de rôles de travail de l’interface utilisateur.
autoscale.min_workers nombre facultatif En cas de masquage, supprime le champ du nombre minimal de rôles de travail de l’interface utilisateur.
autotermination_minutes nombre La valeur 0 représente l’absence d’arrêt automatique. En cas de masquage, supprime la case à cocher d’arrêt automatique et l’entrée de valeur de l’interface utilisateur.
azure_attributes.availability string Contrôle si le calcul utilise des instances à la demande ou des instances spot (ON_DEMAND_AZURE ou SPOT_WITH_FALLBACK_AZURE).
azure_attributes.first_on_demand number Contrôle le nombre de nœuds à placer sur des instances à la demande.
azure_attributes.spot_bid_max_price number Contrôle le prix maximal des instances spot Azure.
cluster_log_conf.path string URL de destination des fichiers journaux.
cluster_log_conf.type string Type de destination du journal. La seule valeur acceptable est DBFS.
cluster_name string le nom du cluster ;
custom_tags.* string Contrôlez des valeurs d’étiquette spécifiques en ajoutant le nom de l’étiquette, par exemple : custom_tags.<mytag>.
data_security_mode string Définit le mode d’accès du cluster. Unity Catalog nécessite SINGLE_USER ou USER_ISOLATION (mode d’accès partagé dans l’interface utilisateur). La valeur NONE signifie qu’aucune fonctionnalité de sécurité n’est activée.
docker_image.basic_auth.password string Mot de passe pour l’authentification de base de l’image des services de conteneur Databricks.
docker_image.basic_auth.username string Nom d’utilisateur pour l’authentification de base de l’image des services de conteneur Databricks.
docker_image.url string Contrôle l’URL de l’image des services de conteneur Databricks. En cas de masquage, supprime la section des services de conteneur Databricks de l’interface utilisateur.
driver_node_type_id chaîne facultative En cas de masquage, supprime la sélection du type de nœud de pilote de l’interface utilisateur.
enable_local_disk_encryption boolean Affectez la valeur true pour activer ou false pour désactiver le chiffrement des disques qui sont attachés localement au cluster (comme spécifié par l’API).
init_scripts.*.workspace.destination init_scripts.*.volumes.destination init_scripts.*.abfss.destination init_scripts.*.file.destination string * fait référence à l’index du script init dans le tableau d’attributs. Consultez Écriture de stratégies pour les attributs de tableau.
instance_pool_id string Contrôle le pool utilisé par les nœuds worker si driver_instance_pool_id est également défini, ou pour tous les nœuds de cluster dans le cas contraire. Si vous utilisez des pools pour les nœuds worker, vous devez également utiliser des pools pour le nœud de pilote. En cas de masquage, supprime la sélection de pool de l’interface utilisateur.
driver_instance_pool_id string Si ce chemin est spécifié, configure un pool pour le nœud de pilote différent de celui pour les nœuds worker. S’il n’est pas spécifié, hérite de instance_pool_id. Si vous utilisez des pools pour les nœuds worker, vous devez également utiliser des pools pour le nœud de pilote. En cas de masquage, supprime la sélection de pool de pilotes de l’interface utilisateur.
node_type_id string En cas de masquage, supprime la sélection du type de nœud worker de l’interface utilisateur.
num_workers nombre facultatif En cas de masquage, supprime la spécification du nombre de rôles de travail de l’interface utilisateur.
runtime_engine string Détermine si le cluster utilise ou non Photon. Les valeurs possibles sont PHOTON ou STANDARD.
single_user_name string Nom d’utilisateur pour l’accès mono-utilisateur pour le passage des informations d’identification.
spark_conf.* chaîne facultative Contrôle des valeurs de configuration spécifiques en ajoutant le nom de la clé de configuration, par exemple : spark_conf.spark.executor.memory.
spark_env_vars.* chaîne facultative Contrôle des valeurs de variable d’environnement Spark spécifiques en ajoutant la variable d’environnement, par exemple : spark_env_vars.<environment variable name>.
spark_version string Nom de version de l’image Spark tel que spécifié via l’API (Databricks Runtime). Vous pouvez également utiliser des valeurs de stratégie spéciales qui sélectionnent dynamiquement le Runtime Databricks. Consultez Valeurs de stratégie spéciales pour la sélection Databricks Runtime.
workload_type.clients.jobs booléen Définit si la ressource de calcul peut être utilisée pour les travaux. Consultez Empêcher l’utilisation du calcul avec des travaux.
workload_type.clients.notebooks boolean Définit si la ressource de calcul peut être utilisée avec des notebooks. Consultez Empêcher l’utilisation du calcul avec des travaux.

Chemins d’accès des attributs virtuels

Ce tableau comprend deux attributs synthétiques supplémentaires pris en charge par les stratégies :

Chemin de l’attribut Type Description
dbus_per_hour nombre Attribut calculé représentant le nombre maximal de DBU qu’une ressource peut utiliser toutes les heures, y compris le nœud du pilote. Cette métrique est un moyen direct de contrôler le coût au niveau du calcul individuel. Utiliser avec une limitation de plage.
cluster_type string Représente le type de cluster qui peut être créé :

* all-purpose pour le calcul universel Azure Databricks
* job pour le calcul de travail créé par le planificateur de travaux
* dlt pour le calcul créé pour les pipelines Delta Live Tables

Autorisez ou bloquez la création de types de calcul spécifiés à partir de la stratégie. Si la valeur all-purpose n’est pas autorisée, la stratégie n’est pas affichée dans l’interface utilisateur de création de calcul universel. Si la valeur job n’est pas autorisée, la stratégie n’est pas affichée dans l’interface utilisateur de création de calcul de travail.

Valeurs de stratégie spéciales pour la sélection Databricks Runtime

L’attribut spark_version prend en charge des valeurs spéciales qui mappent dynamiquement à une version Databricks Runtime basée sur l’ensemble actuel de versions de Databricks Runtime prises en charge.

Les valeurs suivantes peuvent être utilisées dans l’attribut spark_version :

  • auto:latest : mappe à la dernière version de Databricks Runtime en disponibilité générale.
  • auto:latest-ml : mappe à la dernière version ML de Databricks Runtime.
  • auto:latest-lts : mappe à la dernière version Databricks Runtime à long terme (LTS).
  • auto:latest-lts-ml : mappe à la dernière version ML de Databricks Runtime LTS.
  • auto:prev-major : mappe à l’avant-dernière version de Databricks Runtime en disponibilité générale. Par exemple, si auto:latest est 14.2, auto:prev-major sera 13.3.
  • auto:prev-major-ml : mappe à l’avant-dernière version ML de Databricks Runtime. Par exemple, si auto:latest est 14.2, auto:prev-major sera 13.3.
  • auto:prev-lts : mappe à l’avant-dernière version de Databricks Runtime LTS. Par exemple, si auto:latest-lts est 13.3, auto:prev-lts sera 12.2.
  • auto:prev-lts-ml : mappe à l’avant-dernière version ML de Databricks Runtime LTS. Par exemple, si auto:latest-lts est 13.3, auto:prev-lts sera 12.2.

Remarque

L’utilisation de ces valeurs n’enclenche pas la mise à jour automatique du calcul lorsqu’une nouvelle version du runtime est publiée. Un utilisateur doit modifier explicitement le calcul de la version Databricks Runtime à modifier.

Types de stratégie pris en charge

Cette section comprend une référence pour chacun des types de stratégie disponibles. Il existe deux catégories de types de stratégie : les stratégies fixes et les stratégies de limitation.

Les stratégies fixes empêchent la configuration utilisateur sur un attribut. Les deux types de stratégies fixes sont les suivants :

Les stratégies de limitation restreignent les options d’un utilisateur pour la configuration d’un attribut. Les stratégies de limitation vous permettent également de définir des valeurs par défaut et de rendre les attributs facultatifs. Consultez Champs de stratégie de limitation supplémentaires.

Vos options de stratégies de limitation sont les suivantes :

Stratégie fixe

Les stratégies fixes limitent l’attribut à la valeur spécifiée. Pour les valeurs d’attribut autres que numériques et booléennes, la valeur doit être représentée par une chaîne ou convertible en une chaîne.

Avec les stratégies fixes, vous pouvez également masquer l’attribut de l’interface utilisateur en définissant le champ hidden sur true.

interface FixedPolicy {
    type: "fixed";
    value: string | number | boolean;
    hidden?: boolean;
}

Cet exemple de stratégie corrige la version de Databricks Runtime et masque le champ de l’interface utilisateur :

{
  "spark_version": { "type": "fixed", "value": "auto:latest-lts", "hidden": true }
}

Stratégie interdite

Une stratégie interdite empêche les utilisateurs de configurer un attribut. Les stratégies interdites sont compatibles uniquement avec les attributs facultatifs.

interface ForbiddenPolicy {
    type: "forbidden";
}

Cette stratégie interdit l’attachement de pools au calcul pour les nœuds Worker. Les pools sont également interdits pour le nœud de pilote, car driver_instance_pool_id hérite de la stratégie.

{
  "instance_pool_id": { "type": "forbidden" }
}

Stratégie de liste d’autorisation

Une stratégie de liste d’autorisation spécifie une liste de valeurs que l’utilisateur peut choisir lors de la configuration d’un attribut.

interface AllowlistPolicy {
  type: "allowlist";
  values: (string | number | boolean)[];
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Cet exemple de liste d’autorisation permet à l’utilisateur de sélectionner entre deux versions de Databricks Runtime :

{
  "spark_version":  { "type": "allowlist", "values": [ "13.3.x-scala2.12", "12.2.x-scala2.12" ] }
}

Stratégie de liste de blocage

La stratégie de liste de blocage répertorie les valeurs non autorisées. Étant donné que les valeurs doivent être des correspondances exactes, cette stratégie peut ne pas fonctionner comme prévu lorsque l’attribut est modéré dans la manière dont la valeur est représentée (par exemple, en autorisant les espaces de début et de fin).

interface BlocklistPolicy {
  type: "blocklist";
  values: (string | number | boolean)[];
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Cet exemple montre comment empêcher l’utilisateur de sélectionner 7.3.x-scala2.12 en tant que Databricks Runtime.

{
  "spark_version":  { "type": "blocklist", "values": [ "7.3.x-scala2.12" ] }
}

Stratégie d’expression régulière

Une stratégie d’expression régulière limite les valeurs disponibles à celles qui correspondent à l’expression régulière. Pour des raisons de sécurité, assurez vous que votre expression régulière est ancrée au début et à la fin de la valeur de chaîne.

interface RegexPolicy {
  type: "regex";
  pattern: string;
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Cet exemple limite les versions de Databricks Runtime qu’un utilisateur peut sélectionner parmi :

{
  "spark_version":  { "type": "regex", "pattern": "13\\.[3456].*" }
}

Stratégie de plage

Une stratégie de plage limite la valeur à une plage spécifiée à l’aide des champs minValue et maxValue. La valeur doit être un nombre décimal. Les limites numériques doivent pouvoir être représentées en tant que valeur à virgule flottante double. Pour indiquer l’absence d’une limite spécifique, vous pouvez omettre les valeurs minValue ou maxValue.

interface RangePolicy {
  type: "range";
  minValue?: number;
  maxValue?: number;
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Cet exemple limite la quantité maximale de Workers à 10 :

{
  "num_workers":  { "type": "range", "maxValue": 10 }
}

Stratégie illimitée

La stratégie illimitée permet de rendre les attributs obligatoires ou de définir la valeur par défaut dans l’interface utilisateur.

interface UnlimitedPolicy {
  type: "unlimited";
  defaultValue?: string | number | boolean;
  isOptional?: boolean;
}

Cet exemple ajoute la balise COST_BUCKET au calcul :

{
  "custom_tags.COST_BUCKET":  { "type": "unlimited" }
}

Pour définir une valeur par défaut d’une variable de configuration Spark, mais autoriser également l’omission (la suppression) de celle-ci :

{
  "spark_conf.spark.my.conf":  { "type": "unlimited", "isOptional": true, "defaultValue": "my_value" }
}

Champs de stratégie de limitation supplémentaires

Pour les types de stratégie de limitation, vous pouvez spécifier deux champs supplémentaires :

  • defaultValue : valeur qui remplit automatiquement l’interface utilisateur du calcul de création.
  • isOptional : une stratégie de limitation sur un attribut le rend automatiquement obligatoire. Pour rendre l’attribut facultatif, définissez le champ isOptional sur true.

Remarque

Les valeurs par défaut ne sont pas automatiquement appliquées aux calcul créé avec l’API Clusters. Pour appliquer des valeurs par défaut à l’aide de l’API, ajoutez le paramètre apply_policy_default_values à la définition de calcul et définissez-le sur true.

Cet exemple de stratégie spécifie la valeur par défaut id1 pour le pool des nœuds worker, mais le rend facultatif. Lorsque vous créez le calcul, vous pouvez sélectionner un autre pool ou choisir de ne pas en utiliser un. Si driver_instance_pool_id n’est pas défini dans la stratégie ou lors de la création du calcul, le même pool est utilisé pour les nœuds Worker et le nœud de pilote.

{
  "instance_pool_id": { "type": "unlimited", "isOptional": true, "defaultValue": "id1" }
}

Écriture de stratégies pour les attributs de tableau

Vous pouvez spécifier des stratégies pour les attributs de tableau de deux manières :

  • Limitations génériques pour tous les éléments de tableau. Ces limitations utilisent le caractère générique * dans le chemin de la stratégie.
  • Limitations spécifiques pour un élément de tableau au niveau d’un index spécifique. Ces limitations utilisent un nombre dans le chemin.

Par exemple, pour l’attribut de tableau init_scripts, les chemins génériques commencent par init_scripts.* et les chemins spécifiques par init_scripts.<n>, où <n> est un index d’entiers dans le tableau (à partir de 0). Vous pouvez combiner des limitations génériques et spécifiques, auquel cas la limitation générique s’applique à chaque élément de tableau qui n’a pas de limitation spécifique. Dans chaque cas, une seule limitation de stratégie s’applique.

Les sections suivantes présentent des exemples courants qui utilisent des attributs de tableau.

Exiger des entrées spécifiques à l’inclusion

Vous ne pouvez pas exiger des valeurs spécifiques sans spécifier l’ordre. Par exemple :

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-1>"
  },
  "init_scripts.1.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-2>"
  }
}

Exiger une valeur fixe de la liste entière

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<required-script-1>"
  },
  "init_scripts.*.volumes.destination": {
    "type": "forbidden"
  }
}

Interdire complètement l’utilisation

{
   "init_scripts.*.volumes.destination": {
    "type": "forbidden"
  }
}

Autoriser les entrées qui suivent une restriction spécifique

{
    "init_scripts.*.volumes.destination": {
    "type": "regex",
    "pattern": ".*<required-content>.*"
  }
}

Corriger un ensemble spécifique de scripts d’initialisation

Dans le cas de chemins init_scripts, le tableau peut contenir l’une des différentes structures pour lesquelles toutes les variantes possibles peuvent avoir besoin d’être gérées en fonction du cas d’usage. Par exemple, pour exiger un ensemble spécifique de scripts init et interdire toute variante de l’autre version, vous pouvez utiliser le modèle suivant :

{
  "init_scripts.0.volumes.destination": {
    "type": "fixed",
    "value": "<volume-paths>"
  },
  "init_scripts.1.volumes.destination": {
    "type": "fixed",
    "value": "<volume-paths>"
  },
  "init_scripts.*.workspace.destination": {
    "type": "forbidden"
  },
  "init_scripts.*.abfss.destination": {
    "type": "forbidden"
  },
  "init_scripts.*.file.destination": {
    "type": "forbidden"
  }
}

Exemples de stratégies

Cette section comprend des exemples de stratégie que vous pouvez utiliser comme références pour créer vos propres stratégies. Vous pouvez également utiliser les familles de stratégies fournies par Azure Databricks comme modèles pour les cas d’usage de stratégie courants.

Stratégie de calcul générale

Stratégie de calcul à usage général destinée à guider les utilisateurs et à restreindre certaines fonctionnalités, tout en exigeant des balises, en limitant le nombre maximal d’instances et en appliquant un délai d’expiration.

{
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "spark_version": {
    "type": "regex",
    "pattern": "12\\.[0-9]+\\.x-scala.*"
  },
  "node_type_id": {
    "type": "allowlist",
    "values": [
      "Standard_L4s",
      "Standard_L8s",
      "Standard_L16s"
    ],
    "defaultValue": "Standard_L16s_v2"
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "Standard_L16s_v2",
    "hidden": true
  },
  "autoscale.min_workers": {
    "type": "fixed",
    "value": 1,
    "hidden": true
  },
  "autoscale.max_workers": {
    "type": "range",
    "maxValue": 25,
    "defaultValue": 5
  },
  "autotermination_minutes": {
    "type": "fixed",
    "value": 30,
    "hidden": true
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Définir des limites sur le calcul de pipeline Delta Live Tables

Remarque

Lorsque vous utilisez des stratégies pour configurer un calcul Delta Live Tables, Databricks vous recommande d’appliquer une stratégie unique aux calculs default et maintenance.

Pour configurer une stratégie pour un calcul de pipeline, créez une stratégie avec le champ cluster_type défini sur dlt. L’exemple suivant crée une stratégie minimale pour un calcul Delta Live Tables :

{
  "cluster_type": {
    "type": "fixed",
    "value": "dlt"
  },
  "num_workers": {
    "type": "unlimited",
    "defaultValue": 3,
    "isOptional": true
  },
  "node_type_id": {
    "type": "unlimited",
    "isOptional": true
  },
  "spark_version": {
    "type": "unlimited",
    "hidden": true
  }
}

Stratégie de taille moyenne simple

Permet aux utilisateurs de créer un calcul de taille moyenne avec une configuration minimale. Le seul champ obligatoire au moment de la création est le nom du calcul ; le reste est fixe et masqué.

{
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "spark_conf.spark.databricks.cluster.profile": {
    "type": "forbidden",
    "hidden": true
  },
  "autoscale.min_workers": {
    "type": "fixed",
    "value": 1,
    "hidden": true
  },
  "autoscale.max_workers": {
    "type": "fixed",
    "value": 10,
    "hidden": true
  },
  "autotermination_minutes": {
    "type": "fixed",
    "value": 60,
    "hidden": true
  },
  "node_type_id": {
    "type": "fixed",
    "value": "Standard_L8s_v2",
    "hidden": true
  },
  "driver_node_type_id": {
    "type": "fixed",
    "value": "Standard_L8s_v2",
    "hidden": true
  },
  "spark_version": {
    "type": "fixed",
    "value": "auto:latest-ml",
    "hidden": true
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Stratégie de travail uniquement

Permet aux utilisateurs de créer un calcul de travail pour exécuter des travaux. Les utilisateurs ne peuvent pas créer de calcul universel à l’aide de cette stratégie.

{
  "cluster_type": {
    "type": "fixed",
    "value": "job"
  },
  "dbus_per_hour": {
    "type": "range",
    "maxValue": 100
  },
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "num_workers": {
    "type": "range",
    "minValue": 1
  },
  "node_type_id": {
    "type": "regex",
    "pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
  },
  "driver_node_type_id": {
    "type": "regex",
    "pattern": "Standard_[DLS]*[1-6]{1,2}_v[2,3]"
  },
  "spark_version": {
    "type": "unlimited",
    "defaultValue": "auto:latest-lts"
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Stratégie de metastore externe

Permet aux utilisateurs de créer un calcul avec un metastore défini par l’administrateur déjà attaché. Cela est utile pour permettre aux utilisateurs de créer leur propre calcul sans nécessiter de configuration supplémentaire.

{
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionURL": {
      "type": "fixed",
      "value": "jdbc:sqlserver://<jdbc-url>"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionDriverName": {
      "type": "fixed",
      "value": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
  },
  "spark_conf.spark.databricks.delta.preview.enabled": {
      "type": "fixed",
      "value": "true"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionUserName": {
      "type": "fixed",
      "value": "<metastore-user>"
  },
  "spark_conf.spark.hadoop.javax.jdo.option.ConnectionPassword": {
      "type": "fixed",
      "value": "<metastore-password>"
  }
}

Empêche l’utilisation du calcul avec les jobs

Cette stratégie empêche les utilisateurs d’utiliser le calcul pour exécuter des jobs. Les utilisateurs ne pourront utiliser la ressource de calcul qu'avec des notebooks.

{
  "workload_type.clients.notebooks": {
    "type": "fixed",
    "value": true
  },
  "workload_type.clients.jobs": {
    "type": "fixed",
    "value": false
  }
}

Supprimer la stratégie de mise à l’échelle automatique

Cette stratégie désactive la mise à l’échelle automatique et permet à l’utilisateur de définir le nombre de Workers dans une plage donnée.

{
  "num_workers": {
  "type": "range",
  "maxValue": 25,
  "minValue": 1,
  "defaultValue": 5
  }
}

Mise en application des balises personnalisées

Pour ajouter une règle de balise de calcul à une stratégie, utilisez l’attribut custom_tags.<tag-name>.

Par exemple, tout utilisateur qui utilise cette stratégie doit remplir une balise COST_CENTER avec 9999, 9921 ou 9531 pour le lancement du calcul :

   {"custom_tags.COST_CENTER": {"type":"allowlist", "values":["9999", "9921", "9531" ]}}