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.
Uma conta do Armazenamento do Azure.
Um cluster Hadoop local que contém seus dados de origem.
Um dispositivo Azure Data Box.
Conecte o seu Data Box ou Data Box Heavy a uma rede local.
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.
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.
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.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.
Defina a variável
azjars
shell para o local doshadoop-azure
arquivos eazure-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
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.
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.
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 oshadoop-azure*.jar
arquivos e os arquivos dependentesazure-storage*.jar
paradistcp
. 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.
Primeiro, prepare-se para enviar no seu Data Box ou Data Box Heavy.
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.
Desligue o dispositivo e remova os cabos.
Agende uma recolha com a UPS.
Para dispositivos Data Box, consulte Enviar seu Data Box.
Para dispositivos pesados do Data Box, consulte Enviar seu Data Box pesado.
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.
Ao executar as etapas na seção Atribuir o aplicativo a uma função do artigo, certifique-se de atribuir a função de Colaborador de Dados de Blob de Armazenamento à entidade de serviço.
Ao executar as etapas na seção Obter valores para entrar do artigo, salve a ID do aplicativo e os valores secretos do cliente em um arquivo de texto. Você precisa deles em breve.
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
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.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.Abra o
id_map.json
ficheiro num editor de texto.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
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.
Certifique-se de que é o pacote jq instalado no seu computador local.
sudo apt-get install jq
Instale o pacote Requests python.
pip install requests
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.
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'.
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.