使用 Azure PowerShell 管理 Azure Data Lake Analytics
重要
Azure Data Lake Analytics 于 2024 年 2 月 29 日停用。 了解更多信息,请查看此公告。
对于数据分析,你的组织可以使用 Azure Synapse Analytics 或 Microsoft Fabric。
本文介绍如何使用 Azure PowerShell 管理 Azure Data Lake Analytics 帐户、数据源、用户和作业。
先决条件
注释
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
若要将 PowerShell 与 Data Lake Analytics 配合使用,请收集以下信息片段:
- 订阅 ID:包含 Data Lake Analytics 帐户的 Azure 订阅的 ID。
- 资源组:包含 Data Lake Analytics 帐户的 Azure 资源组的名称。
- Data Lake Analytics 帐户名称:Data Lake Analytics 帐户的名称。
- 默认 Data Lake Store 帐户名称:每个 Data Lake Analytics 帐户都有默认的 Data Lake Store 帐户。
- 位置:Data Lake Analytics 帐户的位置,例如“美国东部 2”或其他支持的位置。
本教程中的 PowerShell 代码片段使用这些变量来存储此信息
$subId = "<SubscriptionId>"
$rg = "<ResourceGroupName>"
$adla = "<DataLakeAnalyticsAccountName>"
$adls = "<DataLakeStoreAccountName>"
$location = "<Location>"
登录 Azure
使用交互式用户身份验证登录
使用订阅 ID 或订阅名称登录
# Using subscription id
Connect-AzAccount -SubscriptionId $subId
# Using subscription name
Connect-AzAccount -SubscriptionName $subname
保存身份验证上下文
该 Connect-AzAccount
cmdlet 始终提示输入凭据。 可以使用以下 cmdlet 避免出现提示:
# Save login session information
Save-AzAccounts -Path D:\profile.json
# Load login session information
Select-AzAccounts -Path D:\profile.json
使用服务主体身份(SPI)登录
$tenantid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$spi_appname = "appname"
$spi_appid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$spi_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
$pscredential = New-Object System.Management.Automation.PSCredential ($spi_appid, (ConvertTo-SecureString $spi_secret -AsPlainText -Force))
Login-AzAccount -ServicePrincipal -TenantId $tenantid -Credential $pscredential -Subscription $subid
管理账户
列出帐户
# List Data Lake Analytics accounts within the current subscription.
Get-AdlAnalyticsAccount
# List Data Lake Analytics accounts within a specific resource group.
Get-AdlAnalyticsAccount -ResourceGroupName $rg
创建帐户
每个 Data Lake Analytics 帐户都需要一个用于存储日志的默认 Data Lake Store 帐户。 可以重复使用现有帐户或创建帐户。
# Create a data lake store if needed, or you can re-use an existing one
New-AdlStore -ResourceGroupName $rg -Name $adls -Location $location
New-AdlAnalyticsAccount -ResourceGroupName $rg -Name $adla -Location $location -DefaultDataLake $adls
获取帐户信息
获取有关帐户的详细信息。
Get-AdlAnalyticsAccount -Name $adla
检查帐户是否存在
Test-AdlAnalyticsAccount -Name $adla
管理数据源
Azure Data Lake Analytics 目前支持以下数据源:
每个 Data Lake Analytics 帐户都有默认的 Data Lake Store 帐户。 默认 Data Lake Store 帐户用于存储作业元数据和作业审核日志。
查找默认 Data Lake Store 帐户
$adla_acct = Get-AdlAnalyticsAccount -Name $adla
$dataLakeStoreName = $adla_acct.DefaultDataLakeAccount
可以通过按 IsDefault
属性筛选数据源列表来查找默认 Data Lake Store 帐户:
Get-AdlAnalyticsDataSource -Account $adla | ? { $_.IsDefault }
添加数据源
# Add an additional Storage (Blob) account.
$AzureStorageAccountName = "<AzureStorageAccountName>"
$AzureStorageAccountKey = "<AzureStorageAccountKey>"
Add-AdlAnalyticsDataSource -Account $adla -Blob $AzureStorageAccountName -AccessKey $AzureStorageAccountKey
# Add an additional Data Lake Store account.
$AzureDataLakeStoreName = "<AzureDataLakeStoreAccountName"
Add-AdlAnalyticsDataSource -Account $adla -DataLakeStore $AzureDataLakeStoreName
列出数据源
# List all the data sources
Get-AdlAnalyticsDataSource -Account $adla
# List attached Data Lake Store accounts
Get-AdlAnalyticsDataSource -Account $adla | where -Property Type -EQ "DataLakeStore"
# List attached Storage accounts
Get-AdlAnalyticsDataSource -Account $adla | where -Property Type -EQ "Blob"
提交 U-SQL 作业
将字符串作为 U-SQL 作业提交
$script = @"
@a =
SELECT * FROM
(VALUES
("Contoso", 1500.0),
("Woodgrove", 2700.0)
) AS D( customer, amount );
OUTPUT @a
TO "/data.csv"
USING Outputters.Csv();
"@
$scriptpath = "d:\test.usql"
$script | Out-File $scriptpath
Submit-AdlJob -AccountName $adla -Script $script -Name "Demo"
以 U-SQL 作业的形式提交文件
$scriptpath = "d:\test.usql"
$script | Out-File $scriptpath
Submit-AdlJob -AccountName $adla –ScriptPath $scriptpath -Name "Demo"
列出职位
输出包括当前正在运行的作业以及最近完成的那些作业。
Get-AdlJob -Account $adla
列出前 N 个职位
默认情况下,作业列表在提交时排序。 因此,最近提交的作业会被优先显示。 默认情况下,ADLA 帐户会记住 180 天的作业,但默认情况下,Get-AdlJob cmdlet 仅返回前 500 个。 使用 -Top 参数列出特定数量的作业。
$jobs = Get-AdlJob -Account $adla -Top 10
按作业状态列出作业
使用-State
参数。 可以合并以下任一值:
Accepted
Compiling
Ended
New
Paused
Queued
Running
Scheduling
Start
# List the running jobs
Get-AdlJob -Account $adla -State Running
# List the jobs that have completed
Get-AdlJob -Account $adla -State Ended
# List the jobs that have not started yet
Get-AdlJob -Account $adla -State Accepted,Compiling,New,Paused,Scheduling,Start
按作业结果列出作业
使用 -Result
参数检测是否已成功完成已结束的作业。 它具有以下值:
- 已取消
- 已失败
- 没有
- 成功
# List Successful jobs.
Get-AdlJob -Account $adla -State Ended -Result Succeeded
# List Failed jobs.
Get-AdlJob -Account $adla -State Ended -Result Failed
按作业提交者列出作业
该 -Submitter
参数可帮助你确定谁提交了作业。
Get-AdlJob -Account $adla -Submitter "joe@contoso.com"
按提交时间列出作业
-SubmittedAfter
在筛选到特定时间范围时非常有用。
# List jobs submitted in the last day.
$d = [DateTime]::Now.AddDays(-1)
Get-AdlJob -Account $adla -SubmittedAfter $d
# List jobs submitted in the last seven day.
$d = [DateTime]::Now.AddDays(-7)
Get-AdlJob -Account $adla -SubmittedAfter $d
获取作业状态
获取特定作业的状态。
Get-AdlJob -AccountName $adla -JobId $job.JobId
取消作业
Stop-AdlJob -Account $adla -JobID $jobID
等待作业完成
与其重复执行Get-AdlAnalyticsJob
直到作业完成,可以使用Wait-AdlJob
cmdlet来等待作业结束。
Wait-AdlJob -Account $adla -JobId $job.JobId
列出作业管道和重复周期
Get-AdlJobPipeline
使用 cmdlet 查看以前提交的作业的管道信息。
$pipelines = Get-AdlJobPipeline -Account $adla
$pipeline = Get-AdlJobPipeline -Account $adla -PipelineId "<pipeline ID>"
使用 Get-AdlJobRecurrence
cmdlet 查看以前提交的作业的定期信息。
$recurrences = Get-AdlJobRecurrence -Account $adla
$recurrence = Get-AdlJobRecurrence -Account $adla -RecurrenceId "<recurrence ID>"
管理计算策略
列出现有计算策略
该 Get-AdlAnalyticsComputePolicy
cmdlet 检索有关 Data Lake Analytics 帐户的计算策略的信息。
$policies = Get-AdlAnalyticsComputePolicy -Account $adla
创建计算策略
该 New-AdlAnalyticsComputePolicy
cmdlet 为 Data Lake Analytics 帐户创建新的计算策略。 本示例将指定用户可用的最大 RU 设置为 50,并将最小作业优先级设置为 250。
$userObjectId = (Get-AzAdUser -SearchString "garymcdaniel@contoso.com").Id
New-AdlAnalyticsComputePolicy -Account $adla -Name "GaryMcDaniel" -ObjectId $objectId -ObjectType User -MaxDegreeOfParallelismPerJob 50 -MinPriorityPerJob 250
管理文件
检查是否存在文件
Test-AdlStoreItem -Account $adls -Path "/data.csv"
上传和下载
上传文件。
Import-AdlStoreItem -AccountName $adls -Path "c:\data.tsv" -Destination "/data_copy.csv"
以递归方式上传整个文件夹。
Import-AdlStoreItem -AccountName $adls -Path "c:\myData\" -Destination "/myData/" -Recurse
下载文件。
Export-AdlStoreItem -AccountName $adls -Path "/data.csv" -Destination "c:\data.csv"
以递归方式下载整个文件夹。
Export-AdlStoreItem -AccountName $adls -Path "/" -Destination "c:\myData\" -Recurse
注释
如果上传或下载进程中断,可以通过再次使用 -Resume
标志运行 cmdlet 来尝试恢复进程。
管理 U-SQL 目录
U-SQL 目录用于构建数据和代码,以便 U-SQL 脚本可以共享它们。 目录能够在 Azure Data Lake 中实现数据的最高性能。 有关详细信息,请参阅 “使用 U-SQL 目录”。
列出 U-SQL 目录中的项
# List U-SQL databases
Get-AdlCatalogItem -Account $adla -ItemType Database
# List tables within a database
Get-AdlCatalogItem -Account $adla -ItemType Table -Path "database"
# List tables within a schema.
Get-AdlCatalogItem -Account $adla -ItemType Table -Path "database.schema"
列出 U-SQL 目录的所有程序集
$dbs = Get-AdlCatalogItem -Account $adla -ItemType Database
foreach ($db in $dbs)
{
$asms = Get-AdlCatalogItem -Account $adla -ItemType Assembly -Path $db.Name
foreach ($asm in $asms)
{
$asmname = "[" + $db.Name + "].[" + $asm.Name + "]"
Write-Host $asmname
}
}
获取有关目录项的详细信息
# Get details of a table
Get-AdlCatalogItem -Account $adla -ItemType Table -Path "master.dbo.mytable"
# Test existence of a U-SQL database.
Test-AdlCatalogItem -Account $adla -ItemType Database -Path "master"
在目录中存储凭据
在 U-SQL 数据库中,为 Azure 中托管的数据库创建凭据对象。 目前,U-SQL 凭据是唯一可以通过 PowerShell 创建的目录项类型。
$dbName = "master"
$credentialName = "ContosoDbCreds"
$dbUri = "https://contoso.database.windows.net:8080"
New-AdlCatalogCredential -AccountName $adla `
-DatabaseName $db `
-CredentialName $credentialName `
-Credential (Get-Credential) `
-Uri $dbUri
管理防火墙规则
列出防火墙规则
Get-AdlAnalyticsFirewallRule -Account $adla
添加防火墙规则
$ruleName = "Allow access from on-prem server"
$startIpAddress = "<start IP address>"
$endIpAddress = "<end IP address>"
Add-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName -StartIpAddress $startIpAddress -EndIpAddress $endIpAddress
修改防火墙规则
Set-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName -StartIpAddress $startIpAddress -EndIpAddress $endIpAddress
删除防火墙规则
Remove-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName
允许 Azure IP 地址
Set-AdlAnalyticsAccount -Name $adla -AllowAzureIpState Enabled
Set-AdlAnalyticsAccount -Name $adla -FirewallState Enabled
Set-AdlAnalyticsAccount -Name $adla -FirewallState Disabled
与 Azure 合作
获取错误详细信息
Resolve-AzError -Last
验证你是否在 Windows 计算机上以管理员身份运行
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
$p = New-Object Security.Principal.WindowsPrincipal $user
$p.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
查找租户ID
来自订阅名称:
function Get-TenantIdFromSubscriptionName( [string] $subname )
{
$sub = (Get-AzSubscription -SubscriptionName $subname)
$sub.TenantId
}
Get-TenantIdFromSubscriptionName "ADLTrainingMS"
从订阅 ID:
function Get-TenantIdFromSubscriptionId( [string] $subid )
{
$sub = (Get-AzSubscription -SubscriptionId $subid)
$sub.TenantId
}
$subid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Get-TenantIdFromSubscriptionId $subid
从一个域名地址,如“contoso.com”。
function Get-TenantIdFromDomain( $domain )
{
$url = "https://login.windows.net/" + $domain + "/.well-known/openid-configuration"
return (Invoke-WebRequest $url|ConvertFrom-Json).token_endpoint.Split('/')[3]
}
$domain = "contoso.com"
Get-TenantIdFromDomain $domain
列出所有订阅和租户 ID
$subs = Get-AzSubscription
foreach ($sub in $subs)
{
Write-Host $sub.Name "(" $sub.Id ")"
Write-Host "`tTenant Id" $sub.TenantId
}
后续步骤
- Microsoft Azure 数据湖分析概述
- 通过 Azure 门户 | Azure PowerShell | Azure CLI 开始使用 Data Lake Analytics
- 使用 Azure 门户 | Azure PowerShell | CLI 管理 Azure Data Lake Analytics