使用 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 参数检测是否已成功完成已结束的作业。 它具有以下值:

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

后续步骤