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 till 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 den högsta kostnaden per kluster (genom att ange gränser för attribut vars värden bidrar till timpriset).

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

Behörigheter för klusterprinciper 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 de principer som de har åtkomst till.

Anteckning

Om inga principer har skapats på arbetsytan visas inte listrutan Princip.

Endast administratörsanvändare kan skapa, redigera och ta bort principer. Admin anvä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 KLUSTERPRINCIPER API 2.0 och Behörighets-API 2.0 för att hantera principer.

Princip för personlig beräkning

Personal Compute är en Azure Databricks-hanterad klusterprincip som är tillgänglig som standard på alla Azure Databricks-arbetsytor. Genom att ge användare åtkomst till den här principen kan de skapa beräkningsresurser för enskilda datorer i Azure Databricks för individuell användning.

Administratörer kan hantera åtkomst och anpassa principreglerna så att de passar arbetsytans behov.

Krav

Klusterprinciper kräver Premium-planen.

Tillämpningsregler

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

  • Fast värde med inaktiverat kontrollelement
  • Fast värde med kontrollen dold i användargränssnittet (värdet visas i JSON-vyn)
  • Attributvärde begränsat till en uppsättning värden (tillåt lista eller blockeringslista)
  • Attributvärde som matchar ett angivet regex
  • Numeriskt attribut begränsat till ett visst intervall
  • Standardvärde som används av användargränssnittet med kontroll aktiverat

Hanterade klusterattribut

Klusterprinciper stöder alla klusterattribut som styrs med Kluster-API 2.0. Den specifika typen av begränsningar som stöds kan variera per fält (baserat på deras typ och relation till klusterformulärets gränssnittselement).

Dessutom stöder klusterprinciper följande syntetiska attribut:

  • Ett mått för "max DBU-timme", 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 den källa som skapar klustret: Jobbtjänst (jobbkluster), klustergränssnitt, KLUSTER REST API (kluster för alla syften).

Ohanterade klusterattribut

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

  • Bibliotek som hanteras av Libraries API 2.0. En lösning är att använda en anpassad container eller ett init-skript.
  • Antal kluster som skapats per användare (antingen totalt eller samtidigt). Omfånget för en princip är ett enda 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-principdefinition som 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:et för klusterprinciper 2.0. Så här skapar du en klusterprincip med hjälp av användargränssnittet:

  1. Klicka på beräkningsikonenBeräkning i sidopanelen.

  2. Klicka på fliken Klusterprinciper .

    Fliken Klusterprinciper

  3. Klicka på knappen Skapa princip .

    Ange namn på klusterprincip

  4. Namnge principen. Principnamn är skiftlägesokänsliga.

  5. Klistra in en principdefinition på fliken Definition.

  6. Klicka på Skapa.

Klona en befintlig klusterprincip

Du kan skapa en klusterprincip genom att klona en befintlig princip. Så här klonar du en klusterprincip med hjälp av användargränssnittet:

  1. Klicka på beräkningsikonenBeräkning i sidopanelen.
  2. Klicka på fliken Klusterprinciper .
  3. Välj den princip som du vill klona.
  4. Klicka på Klona.
  5. På nästa sida fylls alla fält i förväg med värden från den befintliga principen. Ändra värdena för de fält som du vill ändra och klicka sedan på Skapa.

Hantera behörigheter för klusterprinciper

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 behörighets-API 2.0.

Lägga till en klusterprincipbehörighet

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

  1. Klicka på beräkningsikonenBeräkning i sidopanelen.

  2. Klicka på fliken Klusterprinciper .

  3. Välj den princip som du vill uppdatera.

  4. Klicka på fliken Behörigheter .

  5. I kolumnen Namn väljer du ett huvudnamn.

    Huvudnamn för principbehörighet

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

    Principbehörighet

  7. 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äkningsikonenBeräkning i sidopanelen.
  2. Klicka på fliken Klusterprinciper .
  3. Välj den princip som du vill uppdatera.
  4. Klicka på fliken Behörigheter .
  5. Klicka på ikonen Ta bort ikon 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:et för klusterprinciper 2.0. Så här redigerar du en klusterprincip med hjälp av användargränssnittet:

  1. Klicka på beräkningsikonenBeräkning i sidopanelen.

  2. Klicka på fliken Klusterprinciper .

    Bild på fliken Klusterprinciper

  3. Välj den princip som du vill redigera.

  4. Klicka på Redigera.

  5. På fliken Definition redigerar du principdefinitionen.

  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:et för klusterprinciper 2.0. Så här tar du bort en klusterprincip med hjälp av användargränssnittet:

  1. Klicka på beräkningsikonenBeräkning i sidofältet.

  2. Klicka på fliken Klusterprinciper .

    Fliken Klusterprinciper har valts

  3. Välj den princip som du vill ta bort.

  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 karta 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 resurstypen 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 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:

Fast princip

Begränsa värdet till det angivna värdet. För andra attributvärden än numeriska och booleska måste värdet för attributet representeras av eller konverteras till en sträng. Alternativt kan attributet döljas i användargränssnittet hidden när 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örhindra användning av attributet för ett valfritt attribut.

interface ForbiddenPolicy {
    type: "forbidden";
}
Exempel

Den här principen förbjuder att pooler kopplas till klustret för arbetsnoder. Pooler är också förbjudna för drivrutinsnoden eftersom driver_instance_pool_id ärver principen.

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

Begränsa principer: vanliga fält

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

  • defaultValue – det värde som fyller i formuläret för att skapa klustret 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 du fältet isOptional till sant.
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 driver_instance_pool_id inte definieras i principen eller när klustret skapas används samma pool för 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" ] }
}

Princip för blockeringslista

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åter 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. För säkerhets skull är regex alltid fäst vid början och slutet av strängvärdet vid matchning.

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

Intervallprincip

Begränsar värdet till det intervall som anges av attributen minValue och maxValue . Värdet måste vara ett decimaltal. De numeriska gränserna måste kunna representeras som ett dubbelt flyttalsvärde. Om du vill ange brist på en 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ärdegränser. Du kan använda den här principtypen för att göra attribut obligatoriska eller för att ange standardvärdet i användargränssnittet.

interface UnlimitedPolicy {
  type: "unlimited";
}
Exempel

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

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

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

{
  "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ägarna för klusterprincipattribut som stöds.

Attributsökväg Typ Description
autoscale.max_workers valfritt nummer När det är dolt tar du bort fältet maximalt arbetsnummer från användargränssnittet.
autoscale.min_workers valfritt nummer När det är dolt tar du bort fältet minsta arbetsnummer från användargränssnittet.
autotermination_minutes antal Värdet 0 representerar ingen automatisk avslutning. När den är dold tar du bort kryssrutan för automatisk avslutning och värdeindata från användargränssnittet.
cluster_log_conf.path sträng Loggfilernas mål-URL.
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 avbildnings-URL:en för Databricks Container Services. När det är dolt tar bort avsnittet Databricks Container Services från användargränssnittet.
driver_node_type_id valfri sträng När den är dold tar bort valet av drivrutinsnodtyp från användargränssnittet.
enable_local_disk_encryption boolean Ange till true för att aktivera eller false inaktivera kryptering av diskar som är lokalt anslutna till klustret (enligt vad som anges via 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 den 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 tar bort valet av pool från användargränssnittet.
driver_instance_pool_id sträng Om detta anges konfigureras en annan pool för drivrutinsnoden än för arbetsnoder. Om det inte anges ärver instance_pool_id. Om du använder pooler för arbetsnoder måste du också använda pooler för drivrutinsnoden. När det är dolt tar bort valet av drivrutinspool från användargränssnittet.
node_type_id sträng När den är dold tar bort valet av arbetsnodtyp från användargränssnittet.
num_workers valfritt nummer När det är dolt tar bort arbetsnummerspecifikationen från användargränssnittet.
single_user_name sträng Användarnamnet för åtkomst till genomströmning för autentiseringsuppgifter för en enskild användare.
spark_conf.* valfri sträng Styr specifika konfigurationsvärden genom att lägga till konfigurationsnyckelns namn, till exempel: spark_conf.spark.executor.memory.
spark_env_vars.* valfri sträng Styr specifika värden för Spark-miljövariabler genom att lägga till miljövariabeln, till exempel: spark_env_vars.<environment variable name>.
spark_version sträng Namnet på Spark-avbildningsversionen (enligt vad som anges via API:et).

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

Attributsökväg Typ Description
dbus_per_hour antal Beräknat attribut som representerar (högsta, vid automatisk skalning av kluster) 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 jobbschemaläggaren
* dlt för kluster som skapats för Delta Live Tables-pipelines

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

Matrisattribut

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

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

För matrisattributet init_scriptsbörjar till exempel de allmänna sökvägarna med init_scripts.* och de specifika sökvägarna med init_scripts.<n>, där <n> är ett heltalsindex i matrisen (från och med 0). Du kan kombinera allmänna och specifika begränsningar, i vilket fall 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. Ett 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. Ett exempel:

    {
      "init_scripts.0.dbfs.destination": {
        "type": "fixed",
        "value": "<required-script-1>"
      },
      "init_scripts.*.dbfs.destination": {
        "type": "forbidden"
      }
    }
    
  • Tillåt inte att användningen används helt och hållet.

    {
      "init_scripts.*.dbfs.destination": {
        "type": "forbidden"
      }
    }
    
  • Tillåt valfritt antal poster, men följ bara en viss begränsning. Ett exempel:

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

När det gäller init_scripts sökvägar kan matrisen innehålla en av flera strukturer för vilka alla möjliga varianter kan behöva 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 generell klusterprincip som är avsedd att vägleda användare och begränsa vissa funktioner, samtidigt som det krävs taggar, begränsar det maximala antalet instanser och framtvingar timeout.

{
  "spark_conf.spark.databricks.cluster.profile": {
    "type": "fixed",
    "value": "singleNode",
    "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 skapandetillfället är klusternamn. resten är fast och dolt.

{
  "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 endast jobb

Gör att användare kan 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 enskild 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 Klusterprincip för enskild nod.

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 ytterligare konfiguration krävs.

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