Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 com capacidade de 80, 120 ou 525 TiB, ou um Data Box Heavy de 770 TiB.
Este artigo ajuda-o a concluir estas tarefas:
- Prepare-se para migrar seus dados
- Copie os seus dados para um disco Data Box, um 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 de utilizador web local do Data Box e aceda à 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 Aceder à 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 o
https://e a 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/hostsde cada nó.10.128.5.42 mystorageaccount.blob.mydataboxno.microsoftdatabox.comSe estiveres a usar outro mecanismo para DNS, deves garantir que o ponto de extremidade Data Box possa ser resolvido.
Defina a variável
azjarspara o local dos ficheiros jar dehadoop-azureeazure-storage. 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 marcador<hadoop_install_dir>pelo caminho para o diretório onde tiver instalado 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.jarazjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jarCrie 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 marcador
<blob_service_endpoint>pelo nome do ponto de extremidade do seu serviço de blob.Substitua o espaço reservado
<account_key>pela chave de acesso da sua conta.Substitua o marcador
<container-name>pelo nome do contentor.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 marcador
<blob_service_endpoint>pelo nome do ponto de extremidade do seu serviço de blob.Substitua o espaço reservado
<account_key>pela chave de acesso da sua conta.Substitua o marcador
<container-name>pelo nome do contentor.
Copie dados do Hadoop HDFS para o armazenamento Data Box Blob, no container 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 marcador
<blob_service_endpoint>pelo nome do ponto de extremidade do seu serviço de blob.Substitua o espaço reservado
<account_key>pela chave de acesso da sua conta.Substitua o marcador
<container-name>pelo nome do contentor.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
-libjarsopção é usada para disponibilizar oshadoop-azure*.jararquivos e os arquivos dependentesazure-storage*.jarparadistcp. Isso já pode ocorrer para alguns clusters.O exemplo a seguir mostra como o
distcpcomando é 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/dataPara 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
distcpem 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 com o seu Data Box ou Data Box Heavy.
Após a preparação do dispositivo estar concluída, baixe os arquivos BOM. 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 Data Box Heavy, consulte Enviar o seu Data Box Heavy.
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 um principal de serviço para a sua conta com o Armazenamento do Azure Data Lake ativado
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 os passos na secção Atribuir a aplicação a uma função do artigo, assegure-se de atribuir o papel de Colaborador de Dados de Blob de Armazenamento ao principal do serviço.
Ao executar as etapas na secção Obter valores para iniciar sessão do artigo, guarde o ID da aplicação e os valores de segredo do cliente num ficheiro de texto. Você precisa deles em breve.
Gerar uma lista de arquivos copiados com suas permissões
No cluster Hadoop instalado localmente, execute o seguinte 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.pyscript. 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 -gEsse script gera um arquivo chamado
id_map.jsonque contém as identidades que você precisa mapear para identidades baseadas em ADD.Abra o
id_map.jsonficheiro num editor de texto.Para cada objeto JSON que aparece no ficheiro, atualize o atributo
targetde 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 marcador
<storage-account-name>por o nome da sua conta de armazenamento.Substitua o marcador
<container-name>pelo nome do contentor.Substitua os
<application-id>e<client-secret>pelos marcadores de posição com o ID do aplicativo e o segredo do cliente que você coletou quando criou o principal 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 o seu nó de rede para executá-los.
No nó de borda ou nó principal do cluster Hadoop nas suas instalações, execute este comando:
git clone https://github.com/jamesbak/databox-adls-loader.git cd databox-adls-loaderEste 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 jqInstale o pacote Python Requests.
pip install requestsDefina 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-listscript 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 remover 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.