Szolgáltatásnév használata a Spark 3-összekötővel az Azure Cosmos DB for NoSQL-hez
Ebből a cikkből megtudhatja, hogyan hozhat létre szerepköralapú hozzáférés-vezérléssel használható Microsoft Entra-alkalmazást és szolgáltatásnevet. Ezután ezzel a szolgáltatásnévvel csatlakozhat egy Azure Cosmos DB for NoSQL-fiókhoz a Spark 3-ból.
Előfeltételek
- Egy meglévő Azure Cosmos DB for NoSQL-fiók.
- Ha már rendelkezik Azure-előfizetéssel, hozzon létre egy új fiókot.
- Nincs Azure-előfizetés? Ingyenesen kipróbálhatja az Azure Cosmos DB-t hitelkártya nélkül.
- Egy meglévő Azure Databricks-munkaterület.
- Regisztrált Microsoft Entra-alkalmazás és szolgáltatásnév.
- Ha nem rendelkezik egyszerű szolgáltatásnévvel és alkalmazással, regisztráljon egy alkalmazást az Azure Portalon.
Titkos kulcs létrehozása és hitelesítő adatok rögzítése
Ebben a szakaszban létrehoz egy ügyfélkulcsot, és rögzíti a későbbi használatra szánt értéket.
Nyissa meg az Azure Portalt.
Nyissa meg a meglévő Microsoft Entra-alkalmazást.
Lépjen a Tanúsítványok > titkos kódok lapra. Ezután hozzon létre egy új titkos kulcsot. Mentse az Ügyfél titkos kód értékét a cikk későbbi részében való használathoz.
Nyissa meg az Áttekintés lapot. Keresse meg és rögzítse az alkalmazás-(ügyfél-) azonosító, az objektumazonosító és a címtár-(bérlői) azonosító értékeit. Ezeket az értékeket a cikk későbbi részében is használhatja.
Nyissa meg a meglévő Azure Cosmos DB for NoSQL-fiókját.
Jegyezze fel az URI-értéket az Áttekintés lapon. Jegyezze fel az előfizetés azonosítóját és az erőforráscsoport értékeit is. Ezeket az értékeket a cikk későbbi részében használhatja.
Definíció és hozzárendelés létrehozása
Ebben a szakaszban egy Microsoft Entra ID szerepkördefiníciót hoz létre. Ezután hozzárendelheti ezt a szerepkört a tárolókban lévő elemek olvasásához és írásához szükséges engedélyekkel.
Hozzon létre egy szerepkört a
az role definition create
parancs használatával. Adja meg az Azure Cosmos DB for NoSQL-fiók nevét és erőforráscsoportját, majd az egyéni szerepkört meghatározó JSON-törzset. A szerepkör a fiókszintre is kiterjed a használatával/
. Győződjön meg arról, hogy a kérelem törzsének tulajdonságával egyedi nevet ad meg aRoleName
szerepkörnek.az cosmosdb sql role definition create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --body '{ "RoleName": "<role-definition-name>", "Type": "CustomRole", "AssignableScopes": ["/"], "Permissions": [{ "DataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*", "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*" ] }] }'
Listázza a létrehozott szerepkördefiníciót, hogy lekérje annak egyedi azonosítóját a JSON-kimenetben. Jegyezze fel a
id
JSON-kimenet értékét.az cosmosdb sql role definition list \ --resource-group "<resource-group-name>" \ --account-name "<account-name>"
[ { ..., "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-grou-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/sqlRoleDefinitions/<role-definition-id>", ... "permissions": [ { "dataActions": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*", "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*" ], "notDataActions": [] } ], ... } ]
Szerepkör-hozzárendelés létrehozásához használható
az cosmosdb sql role assignment create
. Cserélje le<aad-principal-id>
a cikkben korábban rögzített objektumazonosítóra . Cserélje le<role-definition-id>
aid
parancs előző lépésben való futtatásábólaz cosmosdb sql role definition list
beolvasott értékre is.az cosmosdb sql role assignment create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --scope "/" \ --principal-id "<account-name>" \ --role-definition-id "<role-definition-id>"
Szolgáltatásnév használata
Most, hogy létrehozott egy Microsoft Entra-alkalmazást és szolgáltatásnevet, létrehozott egy egyéni szerepkört, és hozzárendelte a szerepkör-engedélyeket az Azure Cosmos DB for NoSQL-fiókjához, képesnek kell lennie jegyzetfüzet futtatására.
Nyissa meg az Azure Databricks-munkaterületet.
A munkaterület felületén hozzon létre egy új fürtöt. Konfigurálja a fürtöt az alábbi beállításokkal, legalább:
Verzió Érték Futtatókörnyezet verziója 13.3 LTS (Scala 2.12, Spark 3.4.1)
A munkaterületi felületen maven-csomagokat kereshet a Maven Centralból a csoportazonosítóval
com.azure.cosmos.spark
. Telepítse a csomagot kifejezetten a Spark 3.4-hez a fürthöz előtaggal ellátott Artifact ID azonosítóvalazure-cosmos-spark_3-4
.Végül hozzon létre egy új jegyzetfüzetet.
Tipp.
Alapértelmezés szerint a jegyzetfüzet a nemrég létrehozott fürthöz van csatolva.
A jegyzetfüzeten belül adja meg az Azure Cosmos DB Spark-összekötő konfigurációs beállításait a NoSQL-fiókvégponthoz, az adatbázis nevéhez és a tároló nevéhez. Használja a cikk korábbi részében rögzített előfizetés-azonosítót, erőforráscsoport-, alkalmazás- (ügyfél-) azonosítót, címtár- (bérlői) azonosítót és ügyfélkulcs-értékeket .
# Set configuration settings config = { "spark.cosmos.accountEndpoint": "<nosql-account-endpoint>", "spark.cosmos.auth.type": "ServicePrincipal", "spark.cosmos.account.subscriptionId": "<subscription-id>", "spark.cosmos.account.resourceGroupName": "<resource-group-name>", "spark.cosmos.account.tenantId": "<entra-tenant-id>", "spark.cosmos.auth.aad.clientId": "<entra-app-client-id>", "spark.cosmos.auth.aad.clientSecret": "<entra-app-client-secret>", "spark.cosmos.database": "<database-name>", "spark.cosmos.container": "<container-name>" }
// Set configuration settings val config = Map( "spark.cosmos.accountEndpoint" -> "<nosql-account-endpoint>", "spark.cosmos.auth.type" -> "ServicePrincipal", "spark.cosmos.account.subscriptionId" -> "<subscription-id>", "spark.cosmos.account.resourceGroupName" -> "<resource-group-name>", "spark.cosmos.account.tenantId" -> "<entra-tenant-id>", "spark.cosmos.auth.aad.clientId" -> "<entra-app-client-id>", "spark.cosmos.auth.aad.clientSecret" -> "<entra-app-client-secret>", "spark.cosmos.database" -> "<database-name>", "spark.cosmos.container" -> "<container-name>" )
Konfigurálja a Catalog API-t a NoSQL-erőforrások API-jának kezelésére a Spark használatával.
# Configure Catalog Api spark.conf.set("spark.sql.catalog.cosmosCatalog", "com.azure.cosmos.spark.CosmosCatalog") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.accountEndpoint", "<nosql-account-endpoint>") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.type", "ServicePrincipal") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.account.subscriptionId", "<subscription-id>") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.account.resourceGroupName", "<resource-group-name>") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.account.tenantId", "<entra-tenant-id>") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.aad.clientId", "<entra-app-client-id>") spark.conf.set("spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.aad.clientSecret", "<entra-app-client-secret>")
// Configure Catalog Api spark.conf.set(s"spark.sql.catalog.cosmosCatalog", "com.azure.cosmos.spark.CosmosCatalog") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.accountEndpoint", "<nosql-account-endpoint>") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.type", "ServicePrincipal") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.account.subscriptionId", "<subscription-id>") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.account.resourceGroupName", "<resource-group-name>") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.account.tenantId", "<entra-tenant-id>") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.aad.clientId", "<entra-app-client-id>") spark.conf.set(s"spark.sql.catalog.cosmosCatalog.spark.cosmos.auth.aad.clientSecret", "<entra-app-client-secret>")
Hozzon létre egy új adatbázist a következő használatával
CREATE DATABASE IF NOT EXISTS
: . Győződjön meg arról, hogy megadja az adatbázis nevét.# Create a database using the Catalog API spark.sql("CREATE DATABASE IF NOT EXISTS cosmosCatalog.{};".format("<database-name>"))
// Create a database using the Catalog API spark.sql(s"CREATE DATABASE IF NOT EXISTS cosmosCatalog.<database-name>;")
Hozzon létre egy új tárolót a megadott adatbázisnév, tárolónév, partíciókulcs elérési útja és átviteli sebesség értékei alapján.
# Create a products container using the Catalog API spark.sql("CREATE TABLE IF NOT EXISTS cosmosCatalog.{}.{} USING cosmos.oltp TBLPROPERTIES(partitionKeyPath = '{}', manualThroughput = '{}')".format("<database-name>", "<container-name>", "<partition-key-path>", "<throughput>"))
// Create a products container using the Catalog API spark.sql(s"CREATE TABLE IF NOT EXISTS cosmosCatalog.<database-name>.<container-name> using cosmos.oltp TBLPROPERTIES(partitionKeyPath = '<partition-key-path>', manualThroughput = '<throughput>')")
Hozzon létre egy mintaadatkészletet.
# Create sample data products = ( ("68719518391", "gear-surf-surfboards", "Yamba Surfboard", 12, 850.00, False), ("68719518371", "gear-surf-surfboards", "Kiama Classic Surfboard", 25, 790.00, True) )
// Create sample data val products = Seq( ("68719518391", "gear-surf-surfboards", "Yamba Surfboard", 12, 850.00, false), ("68719518371", "gear-surf-surfboards", "Kiama Classic Surfboard", 25, 790.00, true) )
A korábban mentett online tranzakciófeldolgozási (OLTP) konfigurációval
spark.createDataFrame
mintaadatokat adhat hozzá a céltárolóhoz.# Ingest sample data spark.createDataFrame(products) \ .toDF("id", "category", "name", "quantity", "price", "clearance") \ .write \ .format("cosmos.oltp") \ .options(config) \ .mode("APPEND") \ .save()
// Ingest sample data spark.createDataFrame(products) .toDF("id", "category", "name", "quantity", "price", "clearance") .write .format("cosmos.oltp") .options(config) .mode("APPEND") .save()
Tipp.
Ebben a rövid útmutatóban a hitelesítő adatok világos szövegben vannak hozzárendelve a változókhoz. A biztonság érdekében javasoljuk, hogy titkos kulcsokat használjon. A titkos kódok konfigurálásáról további információt a Titkos kódok hozzáadása a Spark-konfigurációhoz című témakörben talál.
Kapcsolódó tartalom
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: