Partilhar via


Transformar dados na Rede Virtual do Azure com a atividade do Hive no Azure Data Factory

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Gorjeta

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange tudo, desde a movimentação de dados até ciência de dados, análises em tempo real, business intelligence e relatórios. Saiba como iniciar uma nova avaliação gratuitamente!

Neste tutorial, vai utilizar o Azure PowerShell para criar um pipeline do Data Factory que transforma os dados com a Atividade do Hive num cluster HDInsight que se encontra numa Rede Virtual do Azure (VNet). Vai executar os seguintes passos neste tutorial:

  • Criar uma fábrica de dados.
  • Criar e configurar o integration runtime autoalojado.
  • Criar e implementar serviços ligados.
  • Criar e implementar um pipeline que contém uma atividade do Hive.
  • Iniciar uma execução de pipeline.
  • Monitorizar a execução do pipeline.
  • Verificar a saída.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Carregar o script do Hive para uma conta de Armazenamento de Blobs

  1. Crie um ficheiro SQL do Hive com o nome hivescript.hql com o seguinte conteúdo:

    DROP TABLE IF EXISTS HiveSampleOut; 
    CREATE EXTERNAL TABLE HiveSampleOut (clientid string, market string, devicemodel string, state string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' 
    STORED AS TEXTFILE LOCATION '${hiveconf:Output}';
    
    INSERT OVERWRITE TABLE HiveSampleOut
    Select 
        clientid,
        market,
        devicemodel,
        state
    FROM hivesampletable
    
  2. No Armazenamento de Blobs do Azure, crie um contentor com o nome adftutorial, caso ainda não exista.

  3. Crie uma pasta com o nome hiverscripts.

  4. Carregue o ficheiro hivescript.hql para a sub-pasta hivescripts.

Criar uma fábrica de dados

  1. Defina o nome do grupo de recursos. Crie um grupo de recursos como parte deste tutorial. No entanto, pode utilizar um grupo de recursos existente se assim o desejar.

    $resourceGroupName = "ADFTutorialResourceGroup" 
    
  2. Especifique o nome da fábrica de dados. Tem de ser globalmente exclusivo.

    $dataFactoryName = "MyDataFactory09142017"
    
  3. Especifique um nome para o pipeline.

    $pipelineName = "MyHivePipeline" # 
    
  4. Especifique um nome para o integration runtime autoalojado. Precisa de um untegration runtime autoalojado quando o Data Factory tem de aceder a recursos (por exemplo, à Base de Dados SQL do Azure) dentro de uma VNet.

    $selfHostedIntegrationRuntimeName = "MySelfHostedIR09142017" 
    
  5. Inicie o Azure PowerShell. Mantenha o Azure PowerShell aberto até ao fim deste início rápido. Se o fechar e reabrir, terá de executar os comandos novamente. Para obter uma lista de regiões do Azure em que o Data Factory está atualmente disponível, selecione as regiões que lhe interessam na página seguinte e, em seguida, expanda Analytics para localizar Data Factory: Produtos disponíveis por região. Os arquivos de dados (Armazenamento do Azure, Base de Dados SQL do Azure, etc.) e as computações (HDInsight, etc.) utilizados pela fábrica de dados podem estar noutras regiões.

    Execute o comando seguinte e introduza o nome de utilizador e a palavra-passe que utiliza para iniciar sessão no Portal do Azure:

    Connect-AzAccount
    

    Execute o comando seguinte para ver todas as subscrições desta conta:

    Get-AzSubscription
    

    Execute o comando seguinte para selecionar a subscrição com a qual pretende trabalhar. Substitua SubscriptionId pelo ID da sua subscrição do Azure:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"    
    
  6. Crie o grupo de recursos: ADFTutorialResourceGroup, caso ainda não exista na sua subscrição.

    New-AzResourceGroup -Name $resourceGroupName -Location "East Us" 
    
  7. Crie a fábrica de dados.

     $df = Set-AzDataFactoryV2 -Location EastUS -Name $dataFactoryName -ResourceGroupName $resourceGroupName
    

    Execute o seguinte comando para ver a saída:

    $df
    

Criar o IR autoalojado

Nesta secção, vai criar um integration runtime autoalojado e associá-lo a uma VM do Azure na mesma Rede Virtual do Azure onde o cluster HDInsight se encontra.

  1. Crie o integration runtime autoalojado. Utilize um nome exclusivo no caso de já existir outro integration runtime com o mesmo nome.

    Set-AzDataFactoryV2IntegrationRuntime -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -Name $selfHostedIntegrationRuntimeName -Type SelfHosted
    

    Este comando cria um registo lógico do integration runtime autoalojado.

  2. Utilize o PowerShell para obter chaves de autenticação para registar o integration runtime autoalojado. Copie uma das chaves para registar o integration runtime autoalojado.

    Get-AzDataFactoryV2IntegrationRuntimeKey -ResourceGroupName $resourceGroupName -DataFactoryName $dataFactoryName -Name $selfHostedIntegrationRuntimeName | ConvertTo-Json
    

    Segue-se o resultado do exemplo:

    {
        "AuthKey1":  "IR@0000000000000000000000000000000000000=",
        "AuthKey2":  "IR@0000000000000000000000000000000000000="
    }
    

    Tome nota do valor de AuthKey1 sem a aspa.

  3. Crie uma VM do Azure e associe-a à mesma rede virtual que contém o cluster HDInsight. Para obter mais detalhes, veja Como criar máquinas virtuais. Associe-as a uma Rede Virtual do Azure.

  4. Na VM do Azure, transfira o integration runtime autoalojado. Utilize a Chave de Autenticação que obteve no passo anterior para registar manualmente o integration runtime autoalojado.

    Registar o integration runtime

    Você vê a seguinte mensagem quando o tempo de execução de integração auto-hospedado é registrado com êxito: Registado com êxito

    Você vê a seguinte página quando o nó está conectado ao serviço de nuvem: O nó está ligado

Criar serviços ligados

Nesta secção, vai criar e implementar dois Serviços Ligados:

  • Um Serviço Ligado do Armazenamento do Azure que liga uma conta de Armazenamento do Azure à fábrica de dados. Este armazenamento é o armazenamento primário utilizado pelo cluster HDInsight. Neste caso, também utilizamos esta conta de Armazenamento do Azure para manter o script do Hive e a saída do script.
  • Um Serviço Ligado do HDInsight. O Azure Data Factory envia o script do Hive a este cluster HDInsight para execução.

Serviço ligado do Storage do Azure

Crie um ficheiro JSON com o seu editor preferencial, copie a seguinte definição JSON de um serviço ligado do Armazenamento do Azure e, em seguida, guarde o ficheiro como MyStorageLinkedService.json.

{
    "name": "MyStorageLinkedService",
    "properties": {
      "type": "AzureStorage",
      "typeProperties": {
        "connectionString": "DefaultEndpointsProtocol=https;AccountName=<storageAccountName>;AccountKey=<storageAccountKey>"
      },
      "connectVia": {
        "referenceName": "MySelfhostedIR",
        "type": "IntegrationRuntimeReference"
      }  
    }
}

Substitua <accountname> e <accountkey> pelo nome e chave da sua conta de Armazenamento do Azure.

Serviço ligado do HDInsight

Crie um ficheiro JSON com o seu editor preferencial, copie a seguinte definição JSON de um serviço ligado do Azure HDInsight e guarde o ficheiro como MyHDInsightLinkedService.json.

{
  "name": "MyHDInsightLinkedService",
  "properties": {     
      "type": "HDInsight",
      "typeProperties": {
          "clusterUri": "https://<clustername>.azurehdinsight.net",
          "userName": "<username>",
          "password": {
            "value": "<password>",
            "type": "SecureString"
          },
          "linkedServiceName": {
            "referenceName": "MyStorageLinkedService",
            "type": "LinkedServiceReference"
          }
      },
      "connectVia": {
        "referenceName": "MySelfhostedIR",
        "type": "IntegrationRuntimeReference"
      }
  }
}

Atualize os valores para as seguintes propriedades na definição de serviço ligado:

  • userName. Nome do utilizador de início de sessão do cluster que especificou quando criou o cluster.

  • password. A palavra-passe do utilizador.

  • clusterUri. Especifique a URL do cluster HDInsight no seguinte formato: https://<clustername>.azurehdinsight.net. Este artigo pressupõe que tem acesso ao cluster através da Internet. Por exemplo, pode ligar ao cluster em https://clustername.azurehdinsight.net. Este endereço utiliza o gateway público, que não está disponível se tiver utilizado grupos de segurança de rede (NSGs) ou rotas definidas pelo utilizador (UDRs) para restringir o acesso a partir da Internet. Para que o Data Factory consiga submeter tarefas ao cluster HDInsight na Rede Virtual do Azure, a Rede Virtual do Azure precisa de ser configurada de forma a que o URL possa ser resolvido para o endereço IP privado do gateway utilizado pelo HDInsight.

    1. A partir do portal do Azure, abra a Rede Virtual onde o HDInsight se encontra. Abra a interface de rede com o nome começado por nic-gateway-0. Tome nota do endereço IP privado. Por exemplo, 10.6.0.15.

    2. Se a sua Rede Virtual do Azure tiver um servidor DNS, atualize o registo DNS de forma a que o URL do cluster HDInsight https://<clustername>.azurehdinsight.net possa ser resolvido para 10.6.0.15. Esta é a abordagem recomendada. Se não tiver um servidor DNS na sua Rede Virtual do Azure, pode solucionar temporariamente este problema, editando o ficheiro de anfitriões (C:\Windows\System32\drivers\etc) de todas as VMs registadas como nós de integration runtime autoalojado, adicionando uma entrada semelhante a:

      10.6.0.15 myHDIClusterName.azurehdinsight.net

Criar serviços ligados

No PowerShell, mude para a pasta onde criou os ficheiros JSON e execute o seguinte comando para implementar os serviços ligados:

  1. No PowerShell, mude para a pasta onde criou os ficheiros JSON.

  2. Execute o seguinte comando para criar um serviço ligado do Armazenamento do Azure.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyStorageLinkedService" -File "MyStorageLinkedService.json"
    
  3. Execute o seguinte comando para criar um serviço ligado do Azure SDInsight.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "MyHDInsightLinkedService" -File "MyHDInsightLinkedService.json"
    

Criar um pipeline

Neste passo, vai criar um novo pipeline com uma atividade do Hive. A atividade executa o script do Hive para devolver dados de uma tabela de exemplo e guardá-los no caminho que definiu. Crie um ficheiro JSON no seu editor preferencial, copie a seguinte definição de JSON de uma definição de pipeline e guarde-a como MyHivePipeline.json.

{
  "name": "MyHivePipeline",
  "properties": {
    "activities": [
      {
        "name": "MyHiveActivity",
        "type": "HDInsightHive",
        "linkedServiceName": {
            "referenceName": "MyHDILinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
          "scriptPath": "adftutorial\\hivescripts\\hivescript.hql",
          "getDebugInfo": "Failure",
          "defines": {           
            "Output": "wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/"
          },
          "scriptLinkedService": {
            "referenceName": "MyStorageLinkedService",
            "type": "LinkedServiceReference"
          }
        }
      }
    ]
  }
}

Tenha em conta os seguintes pontos:

  • scriptPath aponta para o caminho do script do Hive na Conta de Armazenamento do Azure que utilizou para MyStorageLinkedService. O caminho é sensível a maiúsculas e minúsculas.
  • Output é um argumento utilizado no script do Hive. Utilize o formato wasb://<Container>@<StorageAccount>.blob.core.windows.net/outputfolder/ para apontá-lo para uma pasta existente no seu Armazenamento do Azure. O caminho é sensível a maiúsculas e minúsculas.

Mude para a pasta onde criou os ficheiros JSON e execute o seguinte comando para implementar o pipeline:

Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name $pipelineName -File "MyHivePipeline.json"

Iniciar o pipeline

  1. Iniciar uma execução de pipeline. Também captura o ID de execução do pipeline para monitorização futura.

    $runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName
    
  2. Execute o script seguinte para verificar continuamente o estado de execução do pipeline até terminar.

    while ($True) {
        $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
    
        if(!$result) {
            Write-Host "Waiting for pipeline to start..." -foregroundcolor "Yellow"
        }
        elseif (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
            Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
        }
        else {
            Write-Host "Pipeline '"$pipelineName"' run finished. Result:" -foregroundcolor "Yellow"
            $result
            break
        }
        ($result | Format-List | Out-String)
        Start-Sleep -Seconds 15
    }
    
    Write-Host "Activity `Output` section:" -foregroundcolor "Yellow"
    $result.Output -join "`r`n"
    
    Write-Host "Activity `Error` section:" -foregroundcolor "Yellow"
    $result.Error -join "`r`n"
    

    Eis o resultado da execução de exemplo:

    Pipeline run status: In Progress
    
    ResourceGroupName : ADFV2SampleRG2
    DataFactoryName   : SampleV2DataFactory2
    ActivityName      : MyHiveActivity
    PipelineRunId     : 000000000-0000-0000-000000000000000000
    PipelineName      : MyHivePipeline
    Input             : {getDebugInfo, scriptPath, scriptLinkedService, defines}
    Output            :
    LinkedServiceName :
    ActivityRunStart  : 9/18/2017 6:58:13 AM
    ActivityRunEnd    :
    DurationInMs      :
    Status            : InProgress
    Error             :
    
    Pipeline ' MyHivePipeline' run finished. Result:
    
    ResourceGroupName : ADFV2SampleRG2
    DataFactoryName   : SampleV2DataFactory2
    ActivityName      : MyHiveActivity
    PipelineRunId     : 0000000-0000-0000-0000-000000000000
    PipelineName      : MyHivePipeline
    Input             : {getDebugInfo, scriptPath, scriptLinkedService, defines}
    Output            : {logLocation, clusterInUse, jobId, ExecutionProgress...}
    LinkedServiceName :
    ActivityRunStart  : 9/18/2017 6:58:13 AM
    ActivityRunEnd    : 9/18/2017 6:59:16 AM
    DurationInMs      : 63636
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    Activity Output section:
    "logLocation": "wasbs://adfjobs@adfv2samplestor.blob.core.windows.net/HiveQueryJobs/000000000-0000-47c3-9b28-1cdc7f3f2ba2/18_09_2017_06_58_18_023/Status"
    "clusterInUse": "https://adfv2HivePrivate.azurehdinsight.net"
    "jobId": "job_1505387997356_0024"
    "ExecutionProgress": "Succeeded"
    "effectiveIntegrationRuntime": "MySelfhostedIR"
    Activity Error section:
    "errorCode": ""
    "message": ""
    "failureType": ""
    "target": "MyHiveActivity"
    
  3. Verifique na pasta outputfolder a existência do novo ficheiro criado como o resultado da consulta do Hive. Deverá ser semelhante à saída de exemplo seguinte:

    8 en-US SCH-i500 California
    23 en-US Incredible Pennsylvania
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    212 en-US SCH-i500 New York
    246 en-US SCH-i500 District Of Columbia
    246 en-US SCH-i500 District Of Columbia
    

Neste tutorial, executou os passos seguintes:

  • Criar uma fábrica de dados.
  • Criar e configurar o integration runtime autoalojado.
  • Criar e implementar serviços ligados.
  • Criar e implementar um pipeline que contém uma atividade do Hive.
  • Iniciar uma execução de pipeline.
  • Monitorizar a execução do pipeline.
  • Verificar a saída.

Avance para o tutorial seguinte para saber como transformar dados através de um cluster do Spark no Azure: