Mover dados de HDFS no local usando Azure Data Factory

Nota

Este artigo aplica-se à versão 1 do Data Factory. Se estiver a utilizar a versão atual do serviço Data Factory, consulte o conector HDFS em V2.

Este artigo explica como utilizar a Copy Activity in Azure Data Factory para mover dados de um HDFS no local. Baseia-se no artigo de Atividades de Movimento de Dados, que apresenta uma visão geral do movimento de dados com a atividade da cópia.

Pode copiar dados do HDFS para qualquer loja de dados de lavatórios suportados. Para obter uma lista de lojas de dados suportadas como pias pela atividade de cópia, consulte a tabela de lojas de dados suportadas. Atualmente, a fábrica de dados suporta apenas a transferência de dados de um HDFS no local para outras lojas de dados, mas não para transferir dados de outras lojas de dados para um HDFS no local.

Nota

A Copy Activity não apaga o ficheiro de origem depois de ser copiado com sucesso para o destino. Se precisar de eliminar o ficheiro de origem após uma cópia bem sucedida, crie uma atividade personalizada para eliminar o ficheiro e utilizar a atividade no pipeline.

Nota

Este artigo utiliza o módulo Azure Az PowerShell, que é o módulo PowerShell recomendado para interagir com o Azure. Para começar a utilizar o módulo Azure PowerShell, veja 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.

Habilitação da conectividade

O serviço Data Factory suporta a ligação ao HDFS no local utilizando o Gateway de Gestão de Dados. Consulte os dados em movimento entre as localizações no local e o artigo na nuvem para saber sobre o Gateway de Gestão de Dados e instruções passo a passo sobre a configuração do gateway. Utilize o gateway para ligar ao HDFS mesmo que esteja hospedado num Azure IaaS VM.

Nota

Certifique-se de que o Gateway de Gestão de Dados pode aceder a ALL o [servidor de nó de nome]:[porta de nó de nome] e [servidores de nó de dados]:[porta de nó de dados] do cluster Hadoop. O predefinido [porta de nó nome] é 50070, e o padrão [porta de nó de dados] é 50075.

Enquanto pode instalar gateway na mesma máquina no local ou no Azure VM que o HDFS, recomendamos que instale o gateway numa máquina separada/Azure IaaS VM. Ter porta de entrada numa máquina separada reduz a contenção de recursos e melhora o desempenho. Quando instalar o gateway numa máquina separada, a máquina deverá poder aceder à máquina com o HDFS.

Introdução

Pode criar um pipeline com uma atividade de cópia que move dados de uma fonte HDFS utilizando diferentes ferramentas/APIs.

A forma mais fácil de criar um oleoduto é utilizar o Copy Wizard. Ver Tutorial: Criar um pipeline utilizando o Copy Wizard para uma rápida passagem pela criação de um pipeline utilizando o assistente de dados Copy.

Também pode utilizar as seguintes ferramentas para criar um pipeline: Portal Azure, Visual Studio, Azure PowerShell, Modelo de Gestor de Recursos Azure, API .NET e API REST. Consulte o tutorial de atividade de cópia para obter instruções passo a passo para criar um oleoduto com uma atividade de cópia.

Quer utilize as ferramentas ou APIs, executa os seguintes passos para criar um pipeline que transfere dados de uma loja de dados de origem para uma loja de dados de lavatório:

  1. Crie serviços ligados para ligar as lojas de dados de entrada e saída à sua fábrica de dados.
  2. Crie conjuntos de dados para representar dados de entrada e saída para a operação de cópia.
  3. Crie um pipeline com uma atividade de cópia que leva um conjunto de dados como entrada e um conjunto de dados como uma saída.

Quando utiliza o assistente, as definições de JSON para estas entidades da Data Factory (serviços ligados, conjuntos de dados e o pipeline) são automaticamente criadas para si. Quando utiliza ferramentas/APIs (exceto.NET API), define estas entidades da Data Factory utilizando o formato JSON. Para obter uma amostra com definições JSON para entidades da Data Factory que são usadas para copiar dados de uma loja de dados HDFS, consulte o exemplo JSON: Copiar dados das secções HDFS para Azure Blob deste artigo.

As seguintes secções fornecem detalhes sobre as propriedades JSON que são usadas para definir entidades da Data Factory específicas do HDFS:

Propriedades de serviço ligadas

Um serviço ligado liga uma loja de dados a uma fábrica de dados. Cria um serviço de tipo Hdfs ligado para ligar um HDFS no local à sua fábrica de dados. A tabela seguinte fornece descrição para elementos JSON específicos do serviço ligado ao HDFS.

Propriedade Descrição Obrigatório
tipo A propriedade tipo deve ser definida para: Hdfs Yes
url URL para o HDFS Yes
authenticationType Anónimo, ou Windows.

Para utilizar a autenticação Kerberos para o conector HDFS, consulte esta secção para configurar o ambiente no local em conformidade.
Yes
userName Nome de utilizador para Windows autenticação. Para a autenticação de Kerberos, especifique <username>@<domain>.com . Sim (para Windows Autenticação)
palavra-passe Senha para Windows autenticação. Sim (para Windows Autenticação)
gatewayName Nome do gateway que o serviço Data Factory deve utilizar para ligar ao HDFS. Yes
criptografadoCredential Saída new-AzDataFactoryEncryptValue da credencial de acesso. No

Utilização da autenticação anónima

{
    "name": "hdfs",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Anonymous",
            "userName": "hadoop",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Utilização da autenticação Windows

{
    "name": "hdfs",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Windows",
            "userName": "<username>@<domain>.com (for Kerberos auth)",
            "password": "password",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Dataset properties (Propriedades do conjunto de dados)

Para obter uma lista completa de secções & propriedades disponíveis para definir conjuntos de dados, consulte o artigo Criar conjuntos de dados. Secções como estrutura, disponibilidade e política de um conjunto de dados JSON são semelhantes para todos os tipos de conjunto de dados (Azure SQL, Azure blob, tabela Azure, etc.).

A secção typeProperties é diferente para cada tipo de conjunto de dados e fornece informações sobre a localização dos dados na loja de dados. A secção typeProperties para conjunto de dados do tipo FileShare (que inclui conjunto de dados HDFS) tem as seguintes propriedades

Propriedade Descrição Obrigatório
folderPath Caminho para a pasta. Exemplo: myfolder

Utilize o personagem de fuga ' \ ' para caracteres especiais na corda. Por exemplo: para a sub-dobragem pasta, especificar \ \ a sub-dobragem de pasta e para d:\samplefolder, especificar d: \ \ amostragem.

Pode combinar esta propriedade com partiçãoDes para ter caminhos de pasta baseados em intervalos de data de início/fim da fatia.
Yes
fileName Especifique o nome do ficheiro na pastaPata se pretender que a tabela se refira a um ficheiro específico na pasta. Se não especificar qualquer valor para esta propriedade, a tabela aponta para todos os ficheiros da pasta.

Quando o data de ficheiro não for especificado para um conjunto de dados de saída, o nome do ficheiro gerado estará no seguinte formato:

Data.<Guid>.txt (por exemplo: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt
No
partitionedBy partitionedBy pode ser usado para especificar uma pasta dinâmicaPath, nome de ficheiro para dados da série de tempo. Exemplo: pastaPametante para cada hora de dados. No
formato Os seguintes tipos de formato são suportados: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Desateia a propriedade tipo em formato a um destes valores. Para mais informações, consulte o Formato de Texto, Formato Json, Formato Avro, Formato Orce Secções De Formato Parquet.

Se pretender copiar ficheiros como-está entre lojas baseadas em ficheiros (cópia binária), salte a secção de formato nas definições de conjunto de dados de entrada e saída.
No
compressão Especifique o tipo e o nível de compressão para os dados. Os tipos suportados são: GZip, Deflate, BZip2 e ZipDeflate. Os níveis suportados são: Ideal e Mais rápido. Para obter mais informações, consulte os formatos de arquivo e compressão na Azure Data Factory. No

Nota

o nome de ficheiro e o ficheiroFiltro não podem ser utilizados simultaneamente.

Usando propriedade partionedBy

Como mencionado na secção anterior, pode especificar uma pasta dinâmicaPath e nome de ficheiro para dados de séries de tempo com a propriedade partitionedBy, funções de Data Factory e as variáveis do sistema.

Para saber mais sobre conjuntos de dados, agendamentos e fatias de séries de tempo, consulte Criar Conjuntos de Dados, Agendar & Execuçãoe Criar artigos de Pipelines.

Amostra 1:

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

Neste exemplo {Slice} é substituído pelo valor da variável do sistema de data factory SliceStart no formato (YYYYMMDDHH) especificado. O SliceStart refere-se à hora de início da fatia. A pastaApata é diferente para cada fatia. Por exemplo: wikidatagateway/wikisampledataout/2014100103 ou wikidatagateway/wikisampledataout/2014100104.

Amostra 2:

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
 [
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

Neste exemplo, ano, mês, dia e hora do SliceStart são extraídos em variáveis separadas que são usadas por propriedades de pastaPata e data de arquivo.

Propriedades da atividade Copy

Para obter uma lista completa das secções & propriedades disponíveis para definir atividades, consulte o artigo Criar Pipelines. Propriedades como nome, descrição, tabelas de entrada e saída, e políticas estão disponíveis para todos os tipos de atividades.

Enquanto que as propriedades disponíveis na secção de tipoproperties da atividade variam com cada tipo de atividade. Para a atividade copy, variam dependendo dos tipos de fontes e pias.

Para a Atividade de Cópia, quando a fonte é do tipo FileSystemSource as seguintes propriedades estão disponíveis na secção typeProperties:

FileSystemSource suporta as seguintes propriedades:

Propriedade Descrição Valores permitidos Necessário
recursivo Indica se os dados são lidos novamente a partir das sub-pastas ou apenas a partir da pasta especificada. Verdadeiro, Falso (padrão) No

Formatos de ficheiro e de compressão suportados

Consulte os formatos de arquivo e compressão no artigo da Azure Data Factory sobre detalhes.

Exemplo JSON: Copiar dados de HDFS para Azure Blob

Esta amostra mostra como copiar dados de um HDFS no local para a Azure Blob Armazenamento. No entanto, os dados podem ser copiados diretamente para qualquer um dos lavatórios aqui indicados utilizando a Atividade de Cópia na Fábrica de Dados Azure.

A amostra fornece definições JSON para as seguintes entidades da Data Factory. Pode utilizar estas definições para criar um pipeline para copiar dados de HDFS para Azure Blob Armazenamento utilizando Visual Studio ou Azure PowerShell.

  1. Um serviço ligado do tipo OnPremisesHdfs.
  2. Um serviço ligado do tipo AzureStorage.
  3. Um conjunto de dados de entrada do tipo FileShare.
  4. Um conjunto de dados de saída do tipo AzureBlob.
  5. Um pipeline com Copy Activity que utiliza FileSystemSource e BlobSink.

A amostra copia dados de um HDFS no local para uma bolha Azure a cada hora. As propriedades JSON utilizadas nestas amostras são descritas em secções que seguem as amostras.

Como primeiro passo, crie o portal de gestão de dados. As instruções nos dados móveis entre locais no local e artigo em nuvem.

Serviço ligado ao HDFS: Este exemplo utiliza a autenticação Windows. Consulte a secção de serviços ligadas ao HDFS para diferentes tipos de autenticação que pode utilizar.

{
    "name": "HDFSLinkedService",
    "properties":
    {
        "type": "Hdfs",
        "typeProperties":
        {
            "authenticationType": "Windows",
            "userName": "Administrator",
            "password": "password",
            "url" : "http://<machine>:50070/webhdfs/v1/",
            "gatewayName": "mygateway"
        }
    }
}

Serviço Azure Armazenamento ligado:

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

Conjunto de dados de entrada HDFS: Este conjunto de dados refere-se à pasta HDFS DataTransfer/UnitTest/. O pipeline copia todos os ficheiros desta pasta para o destino.

Definição "externa": "verdadeiro" informa o serviço Data Factory de que o conjunto de dados é externo à fábrica de dados e não é produzido por uma atividade na fábrica de dados.

{
    "name": "InputDataset",
    "properties": {
        "type": "FileShare",
        "linkedServiceName": "HDFSLinkedService",
        "typeProperties": {
            "folderPath": "DataTransfer/UnitTest/"
        },
        "external": true,
        "availability": {
            "frequency": "Hour",
            "interval":  1
        }
    }
}

Conjunto de dados de saída Azure Blob:

Os dados são escritos para uma nova bolha a cada hora (frequência: hora, intervalo: 1). O caminho da pasta para a bolha é avaliado dinamicamente com base na hora de início da fatia que está a ser processada. O caminho da pasta utiliza partes do ano, mês, dia e horas da hora de início.

{
    "name": "OutputDataset",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/hdfs/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Uma atividade de cópia num oleoduto com fonte do Sistema de Ficheiros e pia Blob:

O pipeline contém uma Atividade de Cópia que está configurada para utilizar estes conjuntos de dados de entrada e saída e está programado para ser executado a cada hora. Na definição JSON do pipeline, o tipo de origem é definido para FileSystemSource e o tipo de pia está definido para BlobSink. A consulta SQL especificada para a propriedade de consulta seleciona os dados na hora passada para copiar.

{
    "name": "pipeline",
    "properties":
    {
        "activities":
        [
            {
                "name": "HdfsToBlobCopy",
                "inputs": [ {"name": "InputDataset"} ],
                "outputs": [ {"name": "OutputDataset"} ],
                "type": "Copy",
                "typeProperties":
                {
                    "source":
                    {
                        "type": "FileSystemSource"
                    },
                    "sink":
                    {
                        "type": "BlobSink"
                    }
                },
                "policy":
                {
                    "concurrency": 1,
                    "executionPriorityOrder": "NewestFirst",
                    "retry": 1,
                    "timeout": "00:05:00"
                }
            }
        ],
        "start": "2014-06-01T18:00:00Z",
        "end": "2014-06-01T19:00:00Z"
    }
}

Utilize a autenticação Kerberos para o conector HDFS

Existem duas opções para configurar o ambiente no local de modo a utilizar a autenticação Kerberos no conector HDFS. Pode escolher o que melhor se encaixa no seu caso.

Opção 1: Junte-se à máquina de gateway no reino de Kerberos

Requisito:

  • A máquina de porta de entrada precisa de se juntar ao reino dos Kerberos e não pode juntar-se a nenhum domínio Windows.

Como configurar:

Na máquina de gateway:

  1. Executar o utilitário Ksetup para configurar o servidor e o reino do Kerberos KDC.

    A máquina deve ser configurada como membro de um grupo de trabalho, uma vez que um reino de Kerberos é diferente de um domínio Windows. Isto pode ser conseguido definindo o reino kerberos e adicionando um servidor KDC da seguinte forma. Substitua REALM.COM pelo seu próprio reino, se necessário.

    Ksetup /setdomain REALM.COM
    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    

    Reinicie a máquina depois de executar estes 2 comandos.

  2. Verifique a configuração com o comando Ksetup. A saída deve ser como:

    Ksetup
    default realm = REALM.COM (external)
    REALM.com:
       kdc = <your_kdc_server_address>
    

Na Fábrica de Dados Azure:

  • Configure o conector HDFS utilizando Windows autenticação juntamente com o nome principal e senha kerberos para ligar à fonte de dados HDFS. Consulte a secção de propriedades do Serviço Linked HDFS nos detalhes da configuração.

Opção 2: Permitir a confiança mútua entre o domínio Windows e o reino de Kerberos

Requisito:

  • A máquina de porta de entrada deve unir-se a um domínio Windows.
  • Precisa de permissão para atualizar as definições do controlador de domínio.

Como configurar:

Nota

Substitua REALM.COM e AD.COM no seguinte tutorial pelo seu próprio reino e controlador de domínio, conforme necessário.

No servidor KDC:

  1. Editar a configuração KDC em ficheiro krb5.conf para permitir que a KDC confie Windows Domínio referindo-se ao seguinte modelo de configuração. Por predefinição, a configuração está localizada em /etc/krb5.conf.

    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
    default_realm = REALM.COM
    dns_lookup_realm = false
    dns_lookup_kdc = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    
    [realms]
    REALM.COM = {
        kdc = node.REALM.COM
        admin_server = node.REALM.COM
    }
    AD.COM = {
    kdc = windc.ad.com
    admin_server = windc.ad.com
    }
    
    [domain_realm]
    .REALM.COM = REALM.COM
    REALM.COM = REALM.COM
    .ad.com = AD.COM
    ad.com = AD.COM
    
    [capaths]
    AD.COM = {
        REALM.COM = .
    }
    

    Reinicie o serviço KDC após a configuração.

  2. Prepare um principal chamado krbtgt/REALM.COM @ AD.COM no servidor KDC com o seguinte comando:

    Kadmin> addprinc krbtgt/REALM.COM@AD.COM
    
  3. No hadoop.security.auth_to_local ficheiro de configuração do serviço HDFS, adicione RULE:[1:$1@$0](.*\@AD.COM)s/\@.*// .

No controlador de domínio:

  1. Executar os seguintes comandos Ksetup para adicionar uma entrada de reino:

    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    ksetup /addhosttorealmmap HDFS-service-FQDN REALM.COM
    
  2. Estabeleça a confiança de Windows Domínio para o Reino de Kerberos. [palavra-passe] é a palavra-passe para o principal krbtgt/REALM.COM @ AD.COM.

    netdom trust REALM.COM /Domain: AD.COM /add /realm /passwordt:[password]
    
  3. Selecione algoritmo de encriptação usado em Kerberos.

    1. Vá ao Gestor de Servidor > Gestão de Políticas de Grupo > Objetos de Política de Grupo > Objetos de Política de Grupo > Política de Domínio Padrão ou Ativo e Edite.

    2. Na janela popup do Editor de Gestão de Políticas de Grupo, aceda à configuração do computador > Políticas > Windows Definições > Segurança Definições > Políticas Locais > Opções de Segurança e configuure a segurança da rede: Configurar tipos de encriptação permitidos para Kerberos.

    3. Selecione o algoritmo de encriptação que pretende utilizar quando ligar ao KDC. Normalmente, pode simplesmente selecionar todas as opções.

      Tipos de encriptação Config para Kerberos

    4. Utilize o comando Ksetup para especificar o algoritmo de encriptação a utilizar no REALM específico.

      ksetup /SetEncTypeAttr REALM.COM DES-CBC-CRC DES-CBC-MD5 RC4-HMAC-MD5 AES128-CTS-HMAC-SHA1-96 AES256-CTS-HMAC-SHA1-96
      
  4. Crie o mapeamento entre a conta de domínio e o principal de Kerberos, de forma a utilizar kerberos principal em Windows Domínio.

    1. Inicie as ferramentas administrativas > Utilizadores e Computadores de Diretório Ativo.

    2. Configure funcionalidades avançadas clicando em Ver > Funcionalidades Avançadas.

    3. Localize a conta à qual pretende criar mapeamentos e clique no botão direito para ver Os Mapeamentos de Nome > clique no separador Nomes Kerberos.

    4. Adicione um diretor do reino.

      Identidade de segurança do mapa

Na máquina de gateway:

  • Executar os seguintes comandos Ksetup para adicionar uma entrada de reino.

    Ksetup /addkdc REALM.COM <your_kdc_server_address>
    ksetup /addhosttorealmmap HDFS-service-FQDN REALM.COM
    

Na Fábrica de Dados Azure:

  • Configure o conector HDFS utilizando Windows autenticação juntamente com a sua Conta de Domínio ou Kerberos Principal para se ligar à fonte de dados HDFS. Consulte a secção de propriedades do Serviço Linked HDFS nos detalhes da configuração.

Nota

Para mapear colunas de conjunto de dados de origem para colunas a partir do conjunto de dados da pia, consulte as colunas de conjunto de dados de mapeamento na Azure Data Factory.

Performance e Afinação

Consulte copy Activity Performance & Guia de Afinação para conhecer os fatores-chave que impactam o desempenho do movimento de dados (Copy Activity) na Azure Data Factory e várias formas de otimizá-lo.