Megosztás a következőn keresztül:


Databricks SDK for R

Feljegyzés

Ez a cikk a Databricks Labs R-hez készült Databricks SDK-ját ismerteti, amely kísérleti állapotban van. Ha visszajelzést szeretne küldeni, kérdéseket tehet fel és jelentheti a problémákat, használja a Problémák lapot a Databricks SDK for R-adattárban a GitHubon.

Ebből a cikkből megtudhatja, hogyan automatizálhatja a műveleteket az Azure Databricks-munkaterületeken és a kapcsolódó erőforrásokban az R-hez készült Databricks SDK-val. Ez a cikk kiegészíti a Databricks SDK for R dokumentációját.

Feljegyzés

Az R-hez készült Databricks SDK nem támogatja az Azure Databricks-fiókok műveleteinek automatizálását. Fiókszintű műveletek meghívásához használjon egy másik Databricks SDK-t, például:

Mielőtt elkezdené

A Databricks SDK for R használatának megkezdése előtt a fejlesztőgépnek a következőkkel kell rendelkeznie:

  • Egy Azure Databricks személyes hozzáférési jogkivonat a megcélzott Azure Databricks-munkaterülethez, amelyet automatizálni szeretne.

    Feljegyzés

    Az R-hez készült Databricks SDK csak az Azure Databricks személyes hozzáférési jogkivonat-hitelesítését támogatja.

  • R, és opcionálisan egy R-kompatibilis integrált fejlesztési környezet (IDE). A Databricks az RStudio Desktop használatát javasolja a jelen cikk utasításaiban.

Ismerkedés az R-hez készült Databricks SDK-val

  1. Tegye elérhetővé az Azure Databricks-munkaterület URL-címét és személyes hozzáférési jogkivonatát az R-projekt szkriptjei számára. Hozzáadhatja például az alábbiakat egy R-projekt fájljába .Renviron . Cserélje le <your-workspace-url> például https://adb-1234567890123456.7.azuredatabricks.neta munkaterületenkénti URL-címet. Cserélje le <your-personal-access-token> például dapi12345678901234567890123456789012az Azure Databricks személyes hozzáférési jogkivonatára.

    DATABRICKS_HOST=<your-workspace-url>
    DATABRICKS_TOKEN=<your-personal-access-token>
    

    Azure Databricks személyes hozzáférési jogkivonat létrehozásához tegye a következőket:

    1. Az Azure Databricks-munkaterületen kattintson az Azure Databricks-felhasználónevére a felső sávon, majd válassza a legördülő menü Beállítások elemét .
    2. Kattintson a Fejlesztőeszközök elemre.
    3. Az Access-jogkivonatok mellett kattintson a Kezelés gombra.
    4. Kattintson az Új jogkivonat létrehozása elemre.
    5. (Nem kötelező) Írjon be egy megjegyzést, amely segít azonosítani a jogkivonatot a jövőben, és módosíthatja a jogkivonat alapértelmezett 90 napos élettartamát. Élettartam nélküli (nem ajánlott) jogkivonat létrehozásához hagyja üresen az Élettartam (nap) mezőt (üres).
    6. Kattintson a Létrehozás lehetőségre.
    7. Másolja a megjelenített jogkivonatot egy biztonságos helyre, majd kattintson a Kész gombra.

    Feljegyzés

    Ügyeljen arra, hogy a másolt jogkivonatot biztonságos helyre mentse. Ne ossza meg másokkal a másolt jogkivonatot. Ha elveszíti a másolt jogkivonatot, nem tudja pontosan ugyanazt a jogkivonatot újragenerálni. Ehelyett meg kell ismételnie ezt az eljárást egy új jogkivonat létrehozásához. Ha elveszíti a másolt jogkivonatot, vagy úgy véli, hogy a jogkivonat sérült, a Databricks határozottan javasolja, hogy azonnal törölje a jogkivonatot a munkaterületről az Access-jogkivonatok lapon a jogkivonat melletti kuka (Visszavonás) ikonra kattintva.

    Ha nem tud jogkivonatokat létrehozni vagy használni a munkaterületen, ennek az lehet az oka, hogy a munkaterület rendszergazdája letiltotta a jogkivonatokat, vagy nem adott engedélyt a jogkivonatok létrehozására vagy használatára. Tekintse meg a munkaterület rendszergazdáját vagy a következő témaköröket:

    Az Azure Databricks-munkaterület URL-címének és személyes hozzáférési jogkivonatának további módjaiért tekintse meg a Hitelesítés a Databricks SDK for R-adattárban a GitHubon.

    Fontos

    Ne adjon hozzá .Renviron fájlokat a verziókövetési rendszerekhez, mivel ez bizalmas információk, például az Azure Databricks személyes hozzáférési jogkivonatainak felfedésével jár.

  2. Telepítse a Databricks SDK for R csomagot. Az RStudio Desktopban például a Konzol nézetben (Fókusz > áthelyezése konzolra) futtassa a következő parancsokat egyenként:

    install.packages("devtools")
    library(devtools)
    install_github("databrickslabs/databricks-sdk-r")
    

    Feljegyzés

    A Databricks SDK for R csomag nem érhető el a CRAN-on.

  3. Adjon hozzá kódot az R-hez készült Databricks SDK-ra való hivatkozáshoz és az Azure Databricks-munkaterület összes fürtjének listázásához. Egy projekt fájljában main.r például a kód a következő lehet:

    require(databricks)
    
    client <- DatabricksClient()
    
    list_clusters(client)[, "cluster_name"]
    
  4. Futtassa a szkriptet. Az RStudio Desktopban például az aktív projektfájlt main.r tartalmazó szkriptszerkesztőben kattintson a Forrás > vagy Forrás gombra az Echo használatával.

  5. Megjelenik a fürtök listája. Az RStudio Desktopban például ez a Konzol nézetben található.

Kódpéldák

Az alábbi példakód bemutatja, hogyan használható a Databricks SDK for R fürtök létrehozására és törlésére, valamint feladatok létrehozására.

Fürt létrehozása

Ez a példakód létrehoz egy fürtöt a megadott Databricks Runtime-verzióval és fürtcsomóponttípussal. Ez a fürt egy feldolgozóval rendelkezik, és a fürt 15 perc tétlenség után automatikusan leáll.

require(databricks)

client <- DatabricksClient()

response <- create_cluster(
  client = client,
  cluster_name = "my-cluster",
  spark_version = "12.2.x-scala2.12",
  node_type_id = "Standard_DS3_v2",
  autotermination_minutes = 15,
  num_workers = 1
)

# Get the workspace URL to be used in the following results message.
get_client_debug <- strsplit(client$debug_string(), split = "host=")
get_host <- strsplit(get_client_debug[[1]][2], split = ",")
host <- get_host[[1]][1]

# Make sure the workspace URL ends with a forward slash.
if (endsWith(host, "/")) {
} else {
  host <- paste(host, "/", sep = "")
}

print(paste(
  "View the cluster at ",
  host,
  "#setting/clusters/",
  response$cluster_id,
  "/configuration",
  sep = "")
)

Fürt végleges törlése

Ez a példakód véglegesen törli a megadott fürtazonosítóval rendelkező fürtöt a munkaterületről.

require(databricks)

client <- DatabricksClient()

cluster_id <- readline("ID of the cluster to delete (for example, 1234-567890-ab123cd4):")

delete_cluster(client, cluster_id)

Feladat létrehozása

Ez a példakód létrehoz egy Azure Databricks-feladatot, amely a megadott jegyzetfüzet futtatására használható a megadott fürtön. A kód futtatásakor lekéri a meglévő jegyzetfüzet elérési útját, a meglévő fürtazonosítót és a kapcsolódó feladatbeállításokat a konzol felhasználójától.

require(databricks)

client <- DatabricksClient()

job_name <- readline("Some short name for the job (for example, my-job):")
description <- readline("Some short description for the job (for example, My job):")
existing_cluster_id <- readline("ID of the existing cluster in the workspace to run the job on (for example, 1234-567890-ab123cd4):")
notebook_path <- readline("Workspace path of the notebook to run (for example, /Users/someone@example.com/my-notebook):")
task_key <- readline("Some key to apply to the job's tasks (for example, my-key):")

print("Attempting to create the job. Please wait...")

notebook_task <- list(
  notebook_path = notebook_path,
  source = "WORKSPACE"
)

job_task <- list(
  task_key = task_key,
  description = description,
  existing_cluster_id = existing_cluster_id,
  notebook_task = notebook_task
)

response <- create_job(
  client,
  name = job_name,
  tasks = list(job_task)
)

# Get the workspace URL to be used in the following results message.
get_client_debug <- strsplit(client$debug_string(), split = "host=")
get_host <- strsplit(get_client_debug[[1]][2], split = ",")
host <- get_host[[1]][1]

# Make sure the workspace URL ends with a forward slash.
if (endsWith(host, "/")) {
} else {
  host <- paste(host, "/", sep = "")
}

print(paste(
  "View the job at ",
  host,
  "#job/",
  response$job_id,
  sep = "")
)

Naplózás

A népszerű logging csomag segítségével naplózhatja az üzeneteket. Ez a csomag több naplózási szinthez és egyéni naplóformátumhoz nyújt támogatást. Ezzel a csomagval üzeneteket naplózhat a konzolra vagy egy fájlba. Az üzenetek naplózásához tegye a következőket:

  1. Telepítse az logging csomagot. Az RStudio Desktopban például a Konzol nézetben (Fókusz > áthelyezése konzolra) futtassa a következő parancsokat:

    install.packages("logging")
    library(logging)
    
  2. Indítsa el a naplózási csomagot, adja meg, hogy hol naplózza az üzeneteket, és állítsa be a naplózási szintet. Az alábbi kód például az összes ERROR üzenetet naplózza a results.log fájlba.

    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
  3. Szükség szerint naplózza az üzeneteket. Az alábbi kód például naplózza az esetleges hibákat, ha a kód nem tudja hitelesíteni vagy listázni az elérhető fürtök nevét.

    require(databricks)
    require(logging)
    
    basicConfig()
    addHandler(writeToFile, file="results.log")
    setLevel("ERROR")
    
    tryCatch({
      client <- DatabricksClient()
    }, error = function(e) {
      logerror(paste("Error initializing DatabricksClient(): ", e$message))
      return(NA)
    })
    
    tryCatch({
      list_clusters(client)[, "cluster_name"]
    }, error = function(e) {
      logerror(paste("Error in list_clusters(client): ", e$message))
      return(NA)
    })
    

Tesztelés

A kód teszteléséhez használhat R tesztelési keretrendszereket, például a testthatot. Ha szimulált körülmények között szeretné tesztelni a kódot az Azure Databricks REST API-végpontok meghívása vagy az Azure Databricks-fiókok vagy -munkaterületek állapotának módosítása nélkül, használhat R-gúnykódtárakat, például a mockeryt.

Ha például a következő fájl neve helpers.r egy függvényt createCluster tartalmaz, amely adatokat ad vissza az új fürtről:

library(databricks)

createCluster <- function(
  databricks_client,
  cluster_name,
  spark_version,
  node_type_id,
  autotermination_minutes,
  num_workers
) {
  response <- create_cluster(
    client = databricks_client,
    cluster_name = cluster_name,
    spark_version = spark_version,
    node_type_id = node_type_id,
    autotermination_minutes = autotermination_minutes,
    num_workers = num_workers
  )
  return(response)
}

És a függvényt meghívó createCluster következő fájlra hivatkozvamain.R:

library(databricks)
source("helpers.R")

client <- DatabricksClient()

# Replace <spark-version> with the target Spark version string.
# Replace <node-type-id> with the target node type string.
response = createCluster(
  databricks_client = client,
  cluster_name = "my-cluster",
  spark_version = "<spark-version>",
  node_type_id = "<node-type-id>",
  autotermination_minutes = 15,
  num_workers = 1
)

print(response$cluster_id)

A következő elnevezett test-helpers.py fájl ellenőrzi, hogy a createCluster függvény a várt választ adja-e vissza. Ahelyett, hogy fürtöt hoz létre a cél-munkaterületen, ez a teszt egy DatabricksClient objektumot szimulál, definiálja a kicsúsztatott objektum beállításait, majd átadja a kicsúsztatott objektumot a createCluster függvénynek. A teszt ezután ellenőrzi, hogy a függvény visszaadja-e az új szimulált fürt várt azonosítóját.

# install.packages("testthat")
# install.pacakges("mockery")
# testthat::test_file("test-helpers.R")
lapply(c("databricks", "testthat", "mockery"), library, character.only = TRUE)
source("helpers.R")

test_that("createCluster mock returns expected results", {
  # Create a mock response.
  mock_response <- list(cluster_id = "abc123")

  # Create a mock function for create_cluster().
  mock_create_cluster <- mock(return_value = mock_response)

  # Run the test with the mock function.
  with_mock(
    create_cluster = mock_create_cluster,
    {
      # Create a mock Databricks client.
      mock_client <- mock()

      # Call the function with the mock client.
      # Replace <spark-version> with the target Spark version string.
      # Replace <node-type-id> with the target node type string.
      response <- createCluster(
        databricks_client = mock_client,
        cluster_name = "my-cluster",
        spark_version = "<spark-version>",
        node_type_id = "<node-type-id>",
        autotermination_minutes = 15,
        num_workers = 1
      )

      # Check that the function returned the correct mock response.
      expect_equal(response$cluster_id, "abc123")
    }
  )
})

További erőforrások

További információk: