Partilhar via


Migrar do repositório HDFS local para o Armazenamento do Azure com o Azure Data Box

Você pode migrar dados de um armazenamento HDFS local do cluster Hadoop para o Armazenamento do Azure (armazenamento de blob ou Armazenamento Data Lake) usando um dispositivo Data Box. Você pode escolher entre o Data Box Disk, um Data Box de 80 TB ou um Data Box Heavy de 770 TB.

Este artigo ajuda-o a concluir estas tarefas:

  • Prepare-se para migrar seus dados
  • Copie os seus dados para um disco Data Box, Data Box ou um dispositivo Data Box Heavy
  • Enviar o dispositivo de volta para a Microsoft
  • Aplicar permissões de acesso a arquivos e diretórios (somente Armazenamento Data Lake)

Pré-requisitos

Você precisa dessas coisas para concluir a migração.

Se você está pronto, vamos começar.

Copiar os dados para um dispositivo Data Box

Se os dados se encaixarem em um único dispositivo Data Box, copie os dados para o dispositivo Data Box.

Se o tamanho dos dados exceder a capacidade do dispositivo Data Box, use o procedimento opcional para dividir os dados em vários dispositivos Data Box e execute esta etapa.

Para copiar os dados do armazenamento HDFS local para um dispositivo Data Box, configure algumas coisas e use a ferramenta DistCp .

Siga estas etapas para copiar dados por meio das APIs REST do armazenamento de Blob/Object para seu dispositivo Data Box. A interface da API REST faz com que o dispositivo apareça como um armazenamento HDFS no cluster.

  1. Antes de copiar os dados via REST, identifique as primitivas de segurança e conexão para se conectar à interface REST no Data Box ou Data Box Heavy. Entre na interface do usuário da Web local do Data Box e vá para a página Conectar e copiar . Nas contas de armazenamento do Azure para o seu dispositivo, em Configurações de acesso, localize e selecione REST.

    Página

  2. Na caixa de diálogo Acessar conta de armazenamento e carregar dados, copie o ponto de extremidade do serviço Blob e a chave da conta de armazenamento. No ponto de extremidade do serviço de blob, omita a barra e a https:// barra à direita.

    Neste caso, o ponto final é: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. A parte do host do URI que você usa é: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Para obter um exemplo, veja como conectar-se ao REST sobre http.

    Caixa de diálogo

  3. Adicione o ponto de extremidade e o endereço IP do nó Data Box ou Data Box Heavy em /etc/hosts cada nó.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Se você estiver usando algum outro mecanismo para DNS, deverá garantir que o ponto de extremidade Data Box possa ser resolvido.

  4. Defina a variável azjars shell para o local dos hadoop-azure arquivos e azure-storage jar. Você pode encontrar esses arquivos no diretório de instalação do Hadoop.

    Para determinar se esses arquivos existem, use o seguinte comando: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. Substitua o espaço reservado <hadoop_install_dir> pelo caminho para o diretório onde você instalou o Hadoop. Certifique-se de usar caminhos totalmente qualificados.

    Exemplos:

    azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar

  5. Crie o contêiner de armazenamento que você deseja usar para cópia de dados. Você também deve especificar um diretório de destino como parte desse comando. Este pode ser um diretório de destino fictício neste momento.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -mkdir -p  wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Substitua o espaço reservado <blob_service_endpoint> pelo nome do ponto de extremidade do serviço de blob.

    • Substitua o espaço reservado <account_key> pela chave de acesso da sua conta.

    • Substitua o espaço reservado <container-name> pelo nome do contêiner.

    • Substitua o espaço reservado <destination_directory> pelo nome do diretório para o qual você deseja copiar seus dados.

  6. Execute um comando list para garantir que seu contêiner e diretório foram criados.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -ls -R  wasb://<container_name>@<blob_service_endpoint>/
    
    • Substitua o espaço reservado <blob_service_endpoint> pelo nome do ponto de extremidade do serviço de blob.

    • Substitua o espaço reservado <account_key> pela chave de acesso da sua conta.

    • Substitua o espaço reservado <container-name> pelo nome do contêiner.

  7. Copie dados do Hadoop HDFS para o armazenamento de Blob do Data Box para o contêiner criado anteriormente. Se o diretório para o qual você está copiando não for encontrado, o comando o criará automaticamente.

    hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \
    -filters <exclusion_filelist_file> \
    [-f filelist_file | /<source_directory> \
           wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Substitua o espaço reservado <blob_service_endpoint> pelo nome do ponto de extremidade do serviço de blob.

    • Substitua o espaço reservado <account_key> pela chave de acesso da sua conta.

    • Substitua o espaço reservado <container-name> pelo nome do contêiner.

    • Substitua o espaço reservado <exclusion_filelist_file> pelo nome do arquivo que contém sua lista de exclusões de arquivos.

    • Substitua o espaço reservado <source_directory> pelo nome do diretório que contém os dados que você deseja copiar.

    • Substitua o espaço reservado <destination_directory> pelo nome do diretório para o qual você deseja copiar seus dados.

    A -libjars opção é usada para disponibilizar os hadoop-azure*.jar arquivos e os arquivos dependentes azure-storage*.jar para distcp. Isso já pode ocorrer para alguns clusters.

    O exemplo a seguir mostra como o distcp comando é usado para copiar dados.

     hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \
    -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \
    /data/testfiles \
    wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
    

    Para melhorar a velocidade de cópia:

    • Tente alterar o número de mapeadores. (O número padrão de mapeadores é 20. O exemplo acima usa m = 4 mapeadores.)

    • Tente -D fs.azure.concurrentRequestCount.out=<thread_number> . Substitua <thread_number> pelo número de threads por mapeador. O produto do número de mapeadores e o número de threads por mapeador, m*<thread_number>, não deve exceder 32.

    • Tente executar vários distcp em paralelo.

    • Lembre-se de que os ficheiros grandes têm um desempenho melhor do que os ficheiros pequenos.

    • Se você tiver arquivos maiores que 200 GB, recomendamos alterar o tamanho do bloco para 100 MB com os seguintes parâmetros:

    hadoop distcp \ 
    -libjars $azjars \ 
    -Dfs.azure.write.request.size= 104857600 \ 
    -Dfs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ 
    -Dfs.azure.account.key.<blob_service_endpoint<>=<account_key> \ 
    -strategy dynamic \ 
    -Dmapreduce.map.memory.mb=16384 \ 
    -Dfs.azure.concurrentRequestCount.out=8 \ 
    -Dmapreduce.map.java.opts=-Xmx8196m \ 
    -m 4 \ 
    -update \ 
    /data/bigfile wasb://hadoop@mystorageaccount.blob.core.windows.net/bigfile
    

Envie o Data Box para a Microsoft

Siga estas etapas para preparar e enviar o dispositivo Data Box para a Microsoft.

  1. Primeiro, prepare-se para enviar no seu Data Box ou Data Box Heavy.

  2. Depois que a preparação do dispositivo estiver concluída, baixe os arquivos de lista técnica. Você usa esses arquivos de lista técnica ou manifesto posteriormente para verificar os dados carregados no Azure.

  3. Desligue o dispositivo e remova os cabos.

  4. Agende uma recolha com a UPS.

  5. Depois que a Microsoft recebe seu dispositivo, ele é conectado à rede do data center e os dados são carregados para a conta de armazenamento que você especificou quando fez o pedido do dispositivo. Verifique nos arquivos de BOM se todos os seus dados foram carregados no Azure.

Aplicar permissões de acesso a arquivos e diretórios (somente Armazenamento Data Lake)

Você já tem os dados em sua conta de Armazenamento do Azure. Agora você aplica permissões de acesso a arquivos e diretórios.

Nota

Esta etapa é necessária somente se você estiver usando o Armazenamento do Azure Data Lake como seu armazenamento de dados. Se você estiver usando apenas uma conta de armazenamento de blob sem namespace hierárquico como seu armazenamento de dados, poderá ignorar esta seção.

Criar uma entidade de serviço para sua conta habilitada para o Armazenamento do Azure Data Lake

Para criar uma entidade de serviço, consulte Como usar o portal para criar um aplicativo e uma entidade de serviço do Microsoft Entra que possam acessar recursos.

Gerar uma lista de arquivos copiados com suas permissões

No cluster Hadoop local, execute este comando:


sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json

Este comando gera uma lista de arquivos copiados com suas permissões.

Nota

Dependendo do número de arquivos no HDFS, esse comando pode levar muito tempo para ser executado.

Gere uma lista de identidades e mapeie-as para identidades do Microsoft Entra

  1. Faça o download do copy-acls.py script. Consulte a seção Baixar scripts auxiliares e configurar o nó de borda para executá-los deste artigo.

  2. Execute este comando para gerar uma lista de identidades exclusivas.

    
    ./copy-acls.py -s ./filelist.json -i ./id_map.json -g
    

    Esse script gera um arquivo chamado id_map.json que contém as identidades que você precisa mapear para identidades baseadas em ADD.

  3. Abra o id_map.json ficheiro num editor de texto.

  4. Para cada objeto JSON que aparece no arquivo, atualize o target atributo de um UPN (Nome Principal do usuário do Microsoft Entra) ou ObjectId (OID), com a identidade mapeada apropriada. Depois de terminar, salve o arquivo. Você precisará desse arquivo na próxima etapa.

Aplicar permissões a arquivos copiados e aplicar mapeamentos de identidade

Execute este comando para aplicar permissões aos dados copiados para a conta habilitada para o Armazenamento Data Lake:

./copy-acls.py -s ./filelist.json -i ./id_map.json  -A <storage-account-name> -C <container-name> --dest-spn-id <application-id>  --dest-spn-secret <client-secret>
  • Substitua o espaço reservado <storage-account-name> pelo nome da sua conta de armazenamento.

  • Substitua o espaço reservado <container-name> pelo nome do contêiner.

  • Substitua os <application-id> espaços reservados e <client-secret> pelo ID do aplicativo e pelo segredo do cliente que você coletou quando criou a entidade de serviço.

Apêndice: Dividir dados em vários dispositivos Data Box

Antes de mover seus dados para um dispositivo Data Box, você precisa baixar alguns scripts auxiliares, garantir que seus dados estejam organizados para caber em um dispositivo Data Box e excluir quaisquer arquivos desnecessários.

Baixe scripts auxiliares e configure seu nó de borda para executá-los

  1. No nó de borda ou cabeça do cluster Hadoop local, execute este comando:

    
    git clone https://github.com/jamesbak/databox-adls-loader.git
    cd databox-adls-loader
    

    Este comando clona o repositório GitHub que contém os scripts auxiliares.

  2. Certifique-se de que é o pacote jq instalado no seu computador local.

    
    sudo apt-get install jq
    
  3. Instale o pacote Requests python.

    
    pip install requests
    
  4. Defina permissões de execução nos scripts necessários.

    
    chmod +x *.py *.sh
    
    

Certifique-se de que seus dados estão organizados para caber em um dispositivo Data Box

Se o tamanho dos seus dados exceder o tamanho de um único dispositivo Data Box, pode dividir os ficheiros em grupos que pode armazenar em vários dispositivos Data Box.

Se os seus dados não excederem o tamanho de um único dispositivo Data Box, pode avançar para a secção seguinte.

  1. Com permissões elevadas, execute o generate-file-list script que você baixou seguindo as orientações na seção anterior.

    Aqui está uma descrição dos parâmetros de comando:

    sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME]
                     [-f LOG_CONFIG] [-l LOG_FILE]
                     [-v {DEBUG,INFO,WARNING,ERROR}]
                     path
    
    where:
    positional arguments:
    path                  The base HDFS path to process.
    
    optional arguments:
    -h, --help            show this help message and exit
    -s DATABOX_SIZE, --databox-size DATABOX_SIZE
                         The size of each Data Box in bytes.
    -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME
                         The base name for the output filelists. Lists will be
                         named basename1, basename2, ... .
    -f LOG_CONFIG, --log-config LOG_CONFIG
                         The name of a configuration file for logging.
    -l LOG_FILE, --log-file LOG_FILE
                         Name of file to have log output written to (default is
                         stdout/stderr)
    -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR}
                         Level of log information to output. Default is 'INFO'.
    
  2. Copie as listas de arquivos geradas para o HDFS para que fiquem acessíveis ao trabalho DistCp .

    hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
    

Excluir arquivos desnecessários

Você precisa excluir alguns diretórios do trabalho DisCp. Por exemplo, exclua diretórios que contenham informações de estado que mantenham o cluster em execução.

No cluster Hadoop local onde você planeja iniciar o trabalho DistCp, crie um arquivo que especifique a lista de diretórios que você deseja excluir.

Eis um exemplo:

.*ranger/audit.*
.*/hbase/data/WALs.*

Próximos passos

Saiba como o Armazenamento Data Lake funciona com clusters HDInsight. Para obter mais informações, consulte Usar o Armazenamento do Azure Data Lake com clusters do Azure HDInsight.