Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przykładowy skrypt programu PowerShell tworzy potok, który przekształca dane w chmurze, uruchamiając program Spark w klastrze Spark usługi Azure HDInsight.
Uwaga
Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
Ten przykładowy skrypt wymaga programu Azure PowerShell. Uruchom Get-Module -ListAvailable Az, aby znaleźć wersję.
Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie modułu Azure PowerShell.
Uruchom polecenie cmdlet Connect-AzAccount, aby nawiązać połączenie z platformą Azure.
Wymagania wstępne
- Konto usługi Azure Storage. Utwórz skrypt języka Python i plik wejściowy i przekaż go do usługi Azure Storage. Dane wyjściowe programu Spark są przechowywane na tym koncie przechowywania. Klaster platformy Spark na żądanie używa tego samego konta magazynu jako swojego podstawowego konta magazynowania.
Przekazywanie skryptu języka Python na konto usługi Blob Storage
Utwórz plik w języku Python o nazwie WordCount_Spark.py i następującej zawartości:
import sys from operator import add from pyspark.sql import SparkSession def main(): spark = SparkSession\ .builder\ .appName("PythonWordCount")\ .getOrCreate() lines = spark.read.text("wasbs://adftutorial@<storageaccountname>.blob.core.windows.net/spark/inputfiles/minecraftstory.txt").rdd.map(lambda r: r[0]) counts = lines.flatMap(lambda x: x.split(' ')) \ .map(lambda x: (x, 1)) \ .reduceByKey(add) counts.saveAsTextFile("wasbs://adftutorial@<storageaccountname>.blob.core.windows.net/spark/outputfiles/wordcount") spark.stop() if __name__ == "__main__": main()Zastąp wartość <storageAccountName> nazwą swojego konta usługi Azure Storage. Następnie zapisz plik.
W usłudze Azure Blob Storage utwórz kontener o nazwie adftutorial, jeśli nie istnieje.
Utwórz folder o nazwie spark.
Utwórz podfolder o nazwie script w folderze spark.
Przekaż plik WordCount_Spark.py do podfolderu script.
Przekazywanie pliku wejściowego
- Utwórz plik o nazwie minecraftstory.txt zawierający tekst. Program platformy Spark zlicza liczbę słów w tym tekście.
- Utwórz podfolder o nazwie
inputfilesw folderzesparkkontenera blob. - Przekaż
minecraftstory.txtdo podfolderuinputfiles.
Przykładowy skrypt
Ważne
Ten skrypt tworzy pliki JSON definiujące jednostki usługi Data Factory (połączona usługa, zestaw danych i potok) na dysku twardym w folderze c:\.
powershell Set-ExecutionPolicy Unrestricted -Scope CurrentUser
# Set variables with your own values
$resourceGroupName = "<Azure resource group name>"
$dataFactoryName = "<Data factory name. Must be globally unique.>"
$dataFactoryRegion = "East US"
$storageAccountName = "<Az.Storage account name> "
$storageAccountKey = "<Az.Storage account key>"
$subscriptionID = "<Azure subscription ID>"
$tenantID = "<tenant ID>"
$servicePrincipalID = "<Active directory service principal ID>"
$servicePrincipalKey = "<Active directory service principal key>"
$pipelineName = "SparkTransformPipeline"
# Create a resource group
New-AzResourceGroup -Name $resourceGroupName -Location $dataFactoryRegion
# Create a data factory
$df = Set-AzDataFactory -ResourceGroupName $resourceGroupName -Location $dataFactoryRegion -Name $dataFactoryName
# Create an Az.Storage linked service in the data factory
## JSON definition of the linked service.
$storageLinkedServiceDefinition = @"
{
"name": "AzureStorageLinkedService",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": {
"value": "DefaultEndpointsProtocol=https;AccountName=$storageAccountName;AccountKey=$storageAccountKey",
"type": "SecureString"
}
}
}
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Set-AzDataFactoryLinkedService command.
$storageLinkedServiceDefinition | Out-File c:\AzureStorageLinkedService.json
## Creates an Az.Storage linked service
Set-AzDataFactoryLinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File c:\AzureStorageLinkedService.json
# Create on-demand Spark linked service in the data factory
## JSON definition of the linked service.
$sparkLinkedServiceDefinition = @"
{
"name": "OnDemandSparkLinkedService",
"properties": {
"type": "HDInsightOnDemand",
"typeProperties": {
"clusterSize": 2,
"clusterType": "spark",
"timeToLive": "00:15:00",
"hostSubscriptionId": "$subscriptionID",
"servicePrincipalId": "$servicePrincipalID",
"servicePrincipalKey": {
"value": "$servicePrincipalKey",
"type": "SecureString"
},
"tenant": "$tenantID",
"clusterResourceGroup": "$resourceGroupName",
"version": "3.6",
"osType": "Linux",
"clusterNamePrefix":"ADFSparkSample",
"linkedServiceName": {
"referenceName": "AzureStorageLinkedService",
"type": "LinkedServiceReference"
}
}
}
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Set-AzDataFactoryLinkedService command.
$sparkLinkedServiceDefinition | Out-File c:\OnDemandSparkLinkedService.json
# Creates an on-demand Spark linked service
Set-AzDataFactoryLinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "OnDemandSparkLinkedService" -File "C:\OnDemandSparkLinkedService.json"
# Create a pipeline in the data factory
## JSON definition of the pipeline
$pipelineDefinition = @"
{
"name": "SparkTransformPipeline",
"properties": {
"activities": [
{
"name": "MySparkActivity",
"type": "HDInsightSpark",
"linkedServiceName": {
"referenceName": "OnDemandSparkLinkedService",
"type": "LinkedServiceReference"
},
"typeProperties": {
"rootPath": "adftutorial/spark",
"entryFilePath": "script/WordCount_Spark.py",
"getDebugInfo": "Failure",
"sparkJobLinkedService": {
"referenceName": "AzureStorageLinkedService",
"type": "LinkedServiceReference"
}
}
}
]
}
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Set-AzDataFactoryPipeline command.
$pipelineDefinition | Out-File c:\SparkTransformPipeline.json
## Create a pipeline with Spark Activity in the data factory
Set-AzDataFactoryPipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "SparkTransformPipeline" -File "c:\SparkTransformPipeline.json"
# Create a pipeline run
## JSON definition for dummy pipeline parameters
$pipelineParameters = @"
{
"dummy": "b"
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Invoke-AzDataFactoryPipeline command.
$pipelineParameters | Out-File c:\PipelineParameters.json
# Create a pipeline run by using parameters
$runId = Invoke-AzDataFactoryPipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName -ParameterFile c:\PipelineParameters.json
# Check the pipeline run status until it finishes
Start-Sleep -Seconds 30
while ($True) {
$result = Get-AzDataFactoryActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
if (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
Start-Sleep -Seconds 300
}
else {
Write-Host "Pipeline $pipelineName run finished. Result:" -foregroundcolor "Yellow"
$result
break
}
}
# Get the activity run details
$result = Get-AzDataFactoryActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName `
-PipelineRunId $runId `
-RunStartedAfter (Get-Date).AddMinutes(-30) `
-RunStartedBefore (Get-Date).AddMinutes(30) `
-ErrorAction Stop
$result
if ($result.Status -eq "Succeeded") {`
$result.Output -join "`r`n"`
}`
else {`
$result.Error -join "`r`n"`
}
# To remove the data factory from the resource gorup
# Remove-AzDataFactory -Name $dataFactoryName -ResourceGroupName $resourceGroupName
#
# To remove the whole resource group
# Remove-AzResourceGroup -Name $resourceGroupName
Dokończenie wdrożenia
Po uruchomieniu przykładowego skryptu możesz użyć następującego polecenia, aby usunąć grupę zasobów i wszystkie skojarzone z nią zasoby:
Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Aby usunąć fabrykę danych z grupy zasobów, uruchom następujące polecenie:
Remove-AzDataFactoryV2 -Name $dataFactoryName -ResourceGroupName $resourceGroupName
Wyjaśnienie skryptu
W tym skrypcie użyto następujących poleceń:
| Komenda | Notatki |
|---|---|
| New-AzResourceGroup | Tworzy grupę zasobów, w której są przechowywane wszystkie zasoby. |
| Set-AzDataFactoryV2 | Tworzenie fabryki danych. |
| Set-AzDataFactoryV2LinkedService | Tworzy powiązaną usługę w fabryce danych. Połączona usługa łączy magazyn danych lub obliczenia z fabryką danych. |
| Set-AzDataFactoryV2Pipeline | Tworzy pipeline w fabryce danych. Potok danych zawiera jedną lub więcej czynności, które wykonują określoną operację. W tym ciągu przetwarzania operacja Spark przekształca dane poprzez uruchamianie programu na klastrze Spark usługi Azure HDInsight. |
| Invoke-AzDataFactoryV2Pipeline | Tworzy przebieg dla potoku. Innymi słowy, uruchamia rurę. |
| Get-AzDataFactoryV2ActivityRun | Pobiera szczegółowe informacje o uruchomieniu działania (przebiegu działania) w potoku. |
| Remove-AzResourceGroup | Usuwa grupę zasobów wraz ze wszystkimi zagnieżdżonymi zasobami. |
Powiązana zawartość
Aby uzyskać więcej informacji na temat programu Azure PowerShell, zobacz dokumentację programu Azure PowerShell.
Dodatkowe przykłady skryptów programu PowerShell usługi Azure Data Factory można znaleźć w przykładach programu PowerShell usługi Azure Data Factory.