Hantera klusterprinciper

Viktigt

Den här funktionen finns som allmänt tillgänglig förhandsversion.

En klusterprincip begränsar möjligheten att konfigurera kluster baserat på en uppsättning regler. Principreglerna begränsar de attribut eller attributvärden som är tillgängliga för att skapa kluster. Klusterprinciper har ACL:er som begränsar deras användning till specifika användare och grupper.

Med klusterprinciper kan du:

  • Begränsa användare att skapa kluster med föreskrivna inställningar.
  • Förenkla användargränssnittet och gör det möjligt för fler användare att skapa sina egna kluster (genom att åtgärda och dölja vissa värden).
  • Kontrollera kostnaden genom att begränsa maxkostnaden per kluster (genom att ange gränser för attribut vars värden bidrar till timpris).

En introduktion till klusterprinciper och konfigurationsrekommendationer finns i videon Om Databricks-klusterprinciper:

Behörigheter för klusterprincip begränsar vilka principer en användare kan välja i listrutan Princip när användaren skapar ett kluster:

  • En användare som har behörighet att skapa kluster kan välja principen Obegränsad och skapa fullständigt konfigurerbara kluster.
  • En användare som har både behörighet att skapa kluster och åtkomst till klusterprinciper kan välja den obegränsade princip och de principer som de har åtkomst till.
  • En användare som bara har åtkomst till klusterprinciper kan välja vilka principer de har åtkomst till.

Anteckning

Om inga principer har skapats på arbetsytanvisas inte listrutan Princip.

Endast administratörsanvändare kan skapa, redigera och ta bort principer. Administratörsanvändare har också åtkomst till alla principer.

Den här artikeln fokuserar på att hantera principer med hjälp av användargränssnittet. Du kan också använda API:er för klusterprinciper för att hantera principer.

Krav

Klusterprinciper kräver Azure Databricks Premium plan.

Tvingande regler

Du kan uttrycka följande typer av begränsningar i principregler:

  • Ett värde har åtgärdats med inaktiverat kontrollelement
  • Fast värde med kontroll dolt i användargränssnittet (värdet är synligt i JSON-vyn)
  • Attributvärde begränsat till en uppsättning värden (antingen lista över tillåtna eller blockerade)
  • Attributvärde som matchar en viss regex
  • Numeriskt attribut som är begränsat till ett visst intervall
  • Standardvärde som används av användargränssnittet med kontroll aktiverat

Attribut för hanterade kluster

Klusterprinciper stöder alla klusterattribut som styrs med kluster-API:et. Den specifika typen av begränsningar som stöds kan variera beroende på fält (beroende på typ och relation till elementen i klusterformulärets användargränssnitt).

Dessutom stöder klusterprinciper följande syntetiska attribut:

  • Ett "högsta DBU-timme"-mått, vilket är det högsta antalet DBU:er som ett kluster kan använda per timme. Det här måttet är ett direkt sätt att kontrollera kostnaden på enskild klusternivå.
  • En gräns för källan som skapar klustret: Jobbtjänst (jobbkluster), klustergränssnitt, REST API (kluster för alla syften).

Attribut för ohanterade kluster

Följande klusterattribut kan inte begränsas i en klusterprincip:

  • Bibliotek, som hanteras av biblioteks-API: et. En lösning är att använda en anpassad container eller ett init-skript.
  • Antal kluster som skapas per användare (antingen totalt eller samtidigt). Omfånget för en princip är ett enskilt kluster, så det finns ingen kunskap om de kluster som skapats av en användare.
  • Klusterbehörigheter (ACL: er), som hanteras av ett separat API.

Definiera en klusterprincip

Du definierar en klusterprincip i en JSON-principdefinitionsom du lägger till när du skapar klusterprincipen.

Skapa en klusterprincip

Du skapar en klusterprincip med hjälp av användargränssnittet för klusterprinciper eller API:erna för klusterprinciper. Så här skapar du en klusterprincip med hjälp av användargränssnittet:

  1. Klicka  på beräkningsikonen Compute i sidofältet.

  2. Klicka på fliken Klusterprinciper.

    Fliken Klusterprinciper

  3. Klicka på knappen Skapa princip.

    Ange klusterprincipnamn

  4. Ge principen ett namn. Principnamn är inte känsliga för case.

  5. Klistra in en principdefinition på fliken Definition.

  6. Klicka på Skapa.

Hantera behörigheter för klusterprincip

Per definition har administratörer behörighet till alla principer. Du kan hantera behörigheter för klusterprinciper med hjälp av användargränssnittet för klusterprinciper eller API:et Behörigheter för klusterprincip.

Lägg till behörighet för en klusterprincip

Så här lägger du till en behörighet för klusterprincip med hjälp av användargränssnittet:

  1. Klicka  på beräkningsikonen Compute i sidofältet.

  2. Klicka på fliken Klusterprinciper.

  3. Klicka på fliken Behörigheter .

  4. Välj ett huvudnamn i kolumnen Namn.

    Huvudnamn för principbehörighet

  5. I kolumnen Behörighet väljer du en behörighet:

    Principbehörighet

  6. Klicka på Lägg till.

Ta bort en klusterprincipbehörighet

Så här tar du bort en klusterprincipbehörighet med hjälp av användargränssnittet:

  1. Klicka  på beräkningsikonen Compute i sidofältet.
  2. Klicka på fliken Klusterprinciper.
  3. Klicka på fliken Behörigheter .
  4. Klicka på Ikonen Ta bort på behörighetsraden.

Redigera en klusterprincip med hjälp av användargränssnittet

Du redigerar en klusterprincip med hjälp av användargränssnittet för klusterprinciper eller API:erna för klusterprinciper. Så här redigerar du en klusterprincip med hjälp av användargränssnittet:

  1. Klicka  på beräkningsikonen Compute i sidofältet.

  2. Klicka på fliken Klusterprinciper.

    Bild av fliken Klusterprinciper

  3. Klicka på ett principnamn.

  4. Klicka på Redigera.

  5. Redigera principdefinitionen på fliken Definition.

  6. Klicka på Uppdatera.

Ta bort en klusterprincip med hjälp av användargränssnittet

Du tar bort en klusterprincip med hjälp av användargränssnittet för klusterprinciper eller API:erna för klusterprinciper. Så här tar du bort en klusterprincip med hjälp av användargränssnittet:

  1. Klicka  på beräkningsikonen Compute i sidofältet.

  2. Klicka på fliken Klusterprinciper.

    Fliken Klusterprinciper har valts

  3. Klicka på ett principnamn.

  4. Klicka på Ta bort.

  5. Bekräfta genom att klicka på Ta bort.

Klusterprincipdefinitioner

En klusterprincipdefinition är en samling enskilda principdefinitioner som uttrycks i JSON.

I det här avsnittet:

Principdefinitioner

En principdefinition är en mappning mellan en sökvägssträng som definierar ett attribut och en gränstyp. Det kan bara finnas en begränsning per attribut. En sökväg är specifik för typen av resurs och återspeglar api-attributnamnet för resursskapande. Om resursskapandet använder kapslade attribut sammanfogar sökvägen de kapslade attributnamnen med hjälp av punkter. Attribut som inte definieras i principdefinitionen är obegränsade när du skapar ett kluster med hjälp av principen.

interface Policy {
  [path: string]: PolicyElement
}

Principelement

Ett principelement anger en av de gränstyper som stöds för ett visst attribut och eventuellt ett standardvärde. Du kan ange ett standardvärde utan att definiera en gräns för attributet i principen.

type PolicyElement = FixedPolicy | ForbiddenPolicy | (LimitingPolicyBase & LimitingPolicy);
type LimitingPolicy = AllowlistPolicy | BlocklistPolicy | RegexPolicy | RangePolicy | UnlimitedPolicy;

I det här avsnittet beskrivs principtyperna:

Princip har åtgärdats

Begränsa värdet till det angivna värdet. För andra attributvärden än numeriska och booleska värden måste värdet för attributet representeras av eller konverteras till en sträng. Attributet kan också döljas i användargränssnittet när hidden flaggan finns och anges till true . En fast princip kan inte ange ett standardvärde.

interface FixedPolicy {
    type: "fixed";
    value: string | number | boolean;
    hidden?: boolean;
}
Exempel
{
  "spark_version": { "type": "fixed", "value": "7.3.x-scala2.12", "hidden": true }
}

Förbjuden princip

För ett valfritt attribut ska du förhindra att attributet används.

interface ForbiddenPolicy {
    type: "forbidden";
}
Exempel

Den här principen förbjuder anslutning av pooler till klustret för arbetsnoder. pooler är också förbjudna för drivrutinsnoden, driver_instance_pool_id eftersom ärver principen.

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

Begränsningsprinciper: vanliga fält

I en begränsningsprincip kan du ange ytterligare två fält:

  • defaultValue – värdet som fyller i formuläret för att skapa kluster i användargränssnittet.
  • isOptional – En begränsningsprincip för ett attribut gör det nödvändigt. Om du vill göra attributet valfritt anger isOptional du fältet till true.
interface LimitedPolicyBase {
    defaultValue?: string | number | boolean;
    isOptional?: boolean;
}
Exempel
{
  "instance_pool_id": { "type": "unlimited", "isOptional": true, "defaultValue": "id1" }
}

Den här exempelprincipen anger standardvärdet id1 för poolen för arbetsnoder, men gör det valfritt. När du skapar klustret kan du välja en annan pool eller välja att inte använda en. Om inte har definierats i principen eller när klustret skapas används samma pool för driver_instance_pool_id arbetsnoder och drivrutinsnoden.

Tillåt listprincip

En lista över tillåtna värden.

interface AllowlistPolicy {
  type: "allowlist";
  values: (string | number | boolean)[];
}
Exempel
{
  "spark_version":  { "type": "allowlist", "values": [ "7.2.x-scala2.12", "7.3.x-scala2.12" ] }
}

Blockera listprincip

Listan över otillåtna värden. Eftersom värdena måste vara exakta matchningar kanske den här principen inte fungerar som förväntat när attributet är överseende med hur värdet representeras (till exempel tillåta inledande och avslutande blanksteg).

interface BlocklistPolicy {
  type: "blocklist";
  values: (string | number | boolean)[];
}
Exempel
{
  "spark_version":  { "type": "blocklist", "values": [ "4.0.x-scala2.11" ] }
}

Regex-princip

Begränsar värdet till de som matchar regex. Av säkerhetsskäl är regex alltid fäst vid början och slutet av strängvärdet när du matchar regex.

interface RegexPolicy {
  type: "regex";
  pattern: string;
}
Exempel
{
  "spark_version":  { "type": "regex", "value": "5\\.[3456].*" }
}

Intervallprincip

Begränsar värdet till det intervall som anges av minValue attributen maxValue och . Värdet måste vara ett decimaltal. De numeriska gränserna måste kunna representeras som ett dubbelt flyttal. Om du vill ange att det inte finns någon specifik gräns kan du utelämna en av minValue , maxValue .

interface RangePolicy {
  type: "range";
  minValue?: number;
  maxValue?: number;
}
Exempel
{
  "num_workers":  { "type": "range", "maxValue": 10 }
}

Obegränsad princip

Definierar inte värdebegränsningar. Du kan använda den här principtypen för att göra attribut obligatoriska eller ange standardvärdet i användargränssnittet.

interface UnlimitedPolicy {
  type: "unlimited";
}
Exempel

Så här kräver du att taggen COST_BUCKET läggs till:

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

Om du vill ange ett standardvärde för en Spark-konfigurationsvariabel, men även tillåta att det utelämnas (tas bort):

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

Sökvägar för klusterprincipattribut

I följande tabell visas sökvägar för klusterprincipattribut som stöds.

Attributsökväg Typ Description
autoscale.max_workers valfritt tal När det är dolt tar bort fältet för maximalt arbetsnummer från användargränssnittet.
autoscale.min_workers valfritt tal När det är dolt tar bort fältet för minsta arbetsnummer från användargränssnittet.
autotermination_minutes antal Värdet 0 representerar ingen automatisk avslutning. När det är dolt tar bort kryssrutan för automatisk avslutning och indata för värden från användargränssnittet.
cluster_log_conf.path sträng Mål-URL:en för loggfilerna.
cluster_log_conf.type sträng DBFS
cluster_name sträng Klusternamnet.
custom_tags.* sträng Kontrollera specifika taggvärden genom att lägga till taggnamnet, till exempel: custom_tags.<mytag> .
docker_image.basic_auth.password sträng Lösenordet för grundläggande autentisering för Databricks Container Services-avbildningen.
docker_image.basic_auth.username sträng Användarnamnet för grundläggande autentisering för Databricks Container Services-avbildningen.
docker_image.url sträng Styr bild-URL:en för Databricks Container Services. När det är dolt tar du bort avsnittet Databricks Container Services från användargränssnittet.
driver_node_type_id valfri sträng När det är dolt tas valet av drivrutinsnodtyp bort från användargränssnittet.
enable_local_disk_encryption boolean Ange till för att aktivera eller inaktivera kryptering av diskar som är lokalt anslutna till klustret (enligt vad true som anges via false API:et).
init_scripts.*.dbfs.destination, init_scripts.*.file.destination sträng * refererar till indexet för init-skriptet i attributmatrisen. Se Matrisattribut.
instance_pool_id sträng Styr poolen som används av arbetsnoder om driver_instance_pool_id också har definierats, eller för alla klusternoder på annat sätt. Om du använder pooler för arbetsnoder måste du också använda pooler för drivrutinsnoden. När det är dolt tas poolval bort från användargränssnittet.
driver_instance_pool_id sträng Om detta anges konfigurerar en annan pool för drivrutinsnoden än för arbetsnoder. Om inget anges ärver instance_pool_id . Om du använder pooler för arbetsnoder måste du också använda pooler för drivrutinsnoden. Om den är dold tas valet av drivrutinspool bort från användargränssnittet.
node_type_id sträng Om den är dold tar bort valet av arbetsnodtyp från användargränssnittet.
num_workers valfritt tal Om den är dold tar bort arbetsnummerspecifikationen från användargränssnittet.
single_user_name sträng Användarnamnet för genomströmning för autentiseringsuppgifter för enkel användaråtkomst.
spark_conf.* valfri sträng Styr specifika konfigurationsvärden genom att ange konfigurationsnyckelns namn, till exempel: spark_conf.spark.executor.memory .
spark_env_vars.* valfri sträng Styr specifika Spark-miljövariabelvärden genom att ange miljövariabeln, till exempel: spark_env_vars.<environment variable name> .
spark_version sträng Versionsnamnet för Spark-avbildningen (som anges via API:et).

Sökvägar för virtuella attribut för klusterprinciper

Attributsökväg Typ Description
dbus_per_hour antal Beräknat attribut som representerar (max, för kluster för automatisk skalning) DBU-kostnaden för klustret, inklusive drivrutinsnoden. För användning med intervallbegränsning.
cluster_type sträng Representerar den typ av kluster som kan skapas:

* all-purpose för Azure Databricks kluster för alla syften
* job för jobbkluster som skapats av jobbschemat

Tillåt eller blockera angivna typer av kluster som ska skapas från principen. Om värdet inte tillåts visas inte principen i formuläret för att skapa all-purpose kluster för alla syften. Om job värdet inte tillåts visas inte principen i det nya jobbklusterformuläret.

Matrisattribut

Du kan ange principer för matrisattribut på två sätt:

  • Allmänna begränsningar för alla matriselement. De här begränsningarna använder * jokertecknet i principsökvägen.
  • Specifika begränsningar för ett matriselement vid ett visst index. Den här begränsningen använder ett tal i sökvägen.

För matrisattributet börjar till exempel de allmänna sökvägarna med och de specifika sökvägarna med , där är ett heltalsindex i matrisen init_scripts init_scripts.* init_scripts.<n> <n> (börjar med 0). Du kan kombinera allmänna och specifika begränsningar, vilket innebär att den allmänna begränsningen gäller för varje matriselement som inte har en specifik begränsning. I varje fall gäller endast en principbegränsning.

Vanliga användningsfall för matrisprinciperna är:

  • Kräv inkluderingsspecifika poster. Exempel:

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

    Du kan inte kräva specifika värden utan att ange ordningen.

  • Kräv ett fast värde för hela listan. Exempel:

    {
      "init_scripts.0.dbfs.destination": {
        "type": "fixed",
        "value": "<required-script-1>"
      },
      "init_scripts.*.dbfs.destination": {
        "type": "forbidden"
      }
    }
    
  • Använd inte alls.

    {
      "init_scripts.*.dbfs.destination": {
        "type": "forbidden"
      }
    }
    
  • Tillåt val av antal poster, men endast efter en specifik begränsning. Exempel:

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

När det gäller sökvägar kan matrisen innehålla en av flera strukturer där alla möjliga varianter kan behöva init_scripts hanteras beroende på användningsfallet. Om du till exempel vill kräva en specifik uppsättning init-skript och inte tillåta någon variant av den andra versionen kan du använda följande mönster:

{
  "init_scripts.1.dbfs.destination": {
    "type": "fixed",
    "value": "dbfs://<dbfs-path>"
  },
  "init_scripts.*.dbfs.destination": {
    "type": "forbidden"
  },
  "init_scripts.*.file.destination": {
    "type": "forbidden"
  },
}

Exempel på klusterprincip

I det här avsnittet:

Allmän klusterprincip

En allmän klusterprincip som är avsedd att vägleda användarna och begränsa vissa funktioner, samtidigt som det krävs taggar, begränsar det maximala antalet instanser och framtvingar tidsgränser.

{
  "spark_conf.spark.databricks.cluster.profile": {
    "type": "fixed",
    "value": "serverless",
    "hidden": true
  },
  "instance_pool_id": {
    "type": "forbidden",
    "hidden": true
  },
  "spark_version": {
    "type": "regex",
    "pattern": "7\\.[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"
  }
}

Enkel medelstor princip

Gör att användarna kan skapa ett medelstort kluster med minimal konfiguration. Det enda obligatoriska fältet vid skapandetiden är klusternamnet. resten är fasta och dolda.

{
  "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": "7.3.x-scala2.12",
    "hidden": true
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Princip för enbart jobb

Låter användare skapa jobbkluster och köra jobb med hjälp av klustret. Användare kan inte skapa ett kluster för alla syften med den här principen.

{
  "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": "regex",
    "pattern": "7\\.[0-9]+\\.x-scala.*"
  },
  "custom_tags.team": {
    "type": "fixed",
    "value": "product"
  }
}

Princip för en nod

Gör att användare kan skapa ett kluster med en nod utan arbetsnoder med Spark aktiverat i lokalt läge. Exempel på principer finns i Princip för kluster med en nod.

Genomströmningsprincip för hög samtidighet

Gör att användare kan skapa kluster i läget för hög samtidighet med genomströmning aktiverat som standard. På så sätt behöver användarna inte ange lämpliga Spark-parametrar manuellt.

{
  "spark_conf.spark.databricks.passthrough.enabled": {
    "type": "fixed",
    "value": "true"
  },
  "spark_conf.spark.databricks.repl.allowedLanguages": {
    "type": "fixed",
    "value": "python,sql"
  },
  "spark_conf.spark.databricks.cluster.profile": {
    "type": "fixed",
    "value": "serverless"
  },
  "spark_conf.spark.databricks.pyspark.enableProcessIsolation": {
    "type": "fixed",
    "value": "true"
  },
  "custom_tags.ResourceClass": {
    "type": "fixed",
    "value": "Serverless"
  }
}

Princip för externt metaarkiv

Gör att användare kan skapa ett kluster med ett administratörsdefinierat metaarkiv som redan är kopplat. Detta är användbart för att tillåta användare att skapa sina egna kluster utan att behöva ytterligare konfiguration.

{
  "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>"
  }
}