使用 Azure PowerShell 管理 Azure Data Lake Analytics

重要

Azure Data Lake Analytics于 2024 年 2 月 29 日停用。 通过此公告了解更多信息。

对于数据分析,组织可以使用 Azure Synapse AnalyticsMicrosoft 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 参数检测结束作业是否成功完成。 它具有下列值:

  • 已取消
  • 失败
  • None
  • 成功
# 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

等待作业完成

可以使用 Wait-AdlJob cmdlet 等待作业结束,而不是重复 Get-AdlAnalyticsJob 直到作业完成。

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 帐户创建新的计算策略。 此示例将指定用户可用的最大 AU 设置为 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 目录

可以使用 -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)  
}

查找 TenantID

通过订阅名称:

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
}

后续步骤