Usar o DistCp para copiar dados entre blobs do Armazenamento do Azure e o Azure Data Lake Storage Gen1

Se você tem um cluster HDInsight com acesso ao Azure Data Lake Storage Gen1, use as ferramentas do ecossistema do Hadoop, como o DistCp para copiar dados, de/para um armazenamento de cluster HDInsight (WASB) para uma conta do Data Lake Storage Gen1. Este artigo mostra como usar a ferramenta DistCp.

Pré-requisitos

Usar o DistCp de um cluster HDInsight do Linux

Um cluster HDInsight é fornecido com a ferramenta DistCp que pode ser usada para copiar dados de diferentes fontes para um cluster HDInsight. Se você configurou o cluster HDInsight para usar o Data Lake Storage Gen1 como um armazenamento adicional, você pode usar o DistCp prontamente para copiar dados de e para uma conta do Data Lake Storage Gen1. Nesta seção, veremos como usar a ferramenta DistCp.

  1. Da sua área de trabalho, use o SSH para se conectar ao cluster. Confira Conectar-se a um cluster HDInsight baseado em Linux. Execute os comandos do prompt de SSH.

  2. Verifique se você pode acessar os WASB (blobs de Armazenamento do Azure). Execute o comando a seguir:

    hdfs dfs –ls wasb://<container_name>@<storage_account_name>.blob.core.windows.net/
    

    A saída fornece uma lista de conteúdos no blob de armazenamento.

  3. Da mesma forma, verifique se você pode acessar a conta de do Data Lake Storage Gen1 do cluster. Execute o comando a seguir:

    hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/
    

    A saída fornece uma lista de arquivos e pastas na conta do Data Lake Storage Gen1.

  4. Use a DistCp para copiar dados do WASB para uma conta do Data Lake Storage Gen1.

    hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder
    

    O comando copia o conteúdo da pasta /example/data/gutenberg/ do WASB em /myfolder na conta do Data Lake Storage Gen1.

  5. De modo semelhante, use a DistCp para copiar dados de uma conta do Data Lake Storage Gen1 para o WASB.

    hadoop distcp adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg
    

    O comando copia o conteúdo de /myfolder da conta do Data Lake Storage Gen1 na pasta /example/data/gutenberg/ no WASB.

Considerações de desempenho ao usar o DistCp

Como a granularidade mais baixa da ferramenta DistCp é um único arquivo, definir o número máximo de cópias simultâneas é o parâmetro mais importante para otimizá-la em relação ao Data Lake Storage Gen1. Você pode controlar o número de cópias simultâneas definindo o parâmetro número de mapeadores ("m") na linha de comando. Esse parâmetro especifica o número máximo de mapeadores que são usados para copiar dados. O valor padrão é 20.

Exemplo:

 hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder -m 100

Como determinar o número de mapeadores a serem usados

Aqui estão algumas diretrizes que podem ser usadas.

  • Etapa 1: Determinar a memória total de YARN ‑ A primeira etapa é determinar a memória YARN disponível para o cluster em que você executa o trabalho DistCp. Essas informações estão disponíveis no portal do Ambari associado ao cluster. Navegue até YARN e veja a guia Configurações para ver a memória YARN. Para obter a memória YARN total, multiplique a memória YARN por nó pelo número de nós que você tem no cluster.

  • Etapa 2: Calcule o número de mapeadores - O valor de m é igual ao quociente da memória total do YARN dividido pelo tamanho do contêiner do YARN. As informações de tamanho do contêiner YARN também estão disponíveis no portal do Ambari. Navegue até YARN e veja a guia Configurações. O tamanho do contêiner YARN é exibido nessa janela. A equação para se chegar até o número de mapeadores (m) é:

    m = (number of nodes * YARN memory for each node) / YARN container size

Exemplo:

Suponhamos que você tenha quatro nós D14v2s no cluster e deseja transferir 10 TB de dados de 10 pastas diferentes. Cada uma das pastas contêm volumes diversos de dados e os tamanhos dos arquivos em cada pasta também são diferentes.

  • Total de memória YARN – No portal do Ambari você determina que a memória YARN é 96 GB para um nó D14. Portanto, o total de memória YARN para um cluster de quatro nós é:

    YARN memory = 4 * 96GB = 384GB

  • Número de mapeadores ‑ Do portal do Ambari a você determina que o tamanho do contêiner YARN é 3072 para um nó de cluster D14. Portanto, o número de mapeadores é:

    m = (4 nodes * 96GB) / 3072MB = 128 mappers

Se outros aplicativos estiverem usando memória, você poderá usar somente uma parte da memória YARN do cluster para a DistCp.

Copiando grandes conjuntos de dados

Quando o tamanho do conjunto de dados a ser movido for grande (por exemplo, > 1 TB) ou se você tiver muitas pastas diferentes, considere usar vários trabalhos DistCp. Provavelmente, não haverá nenhum ganho de desempenho, porém isso espalhará os trabalhos para que, se algum deles falhar, você só precisará reiniciar esse trabalho específico em vez de todo o trabalho.

Limitações

  • O DistCp tenta criar mapeadores de tamanho semelhantes para otimizar o desempenho. Aumentar o número de mapeadores nem sempre melhora o desempenho.

  • O DistCp é limitado a apenas um mapeador por arquivo. Portanto, você não deve ter mais mapeadores do que arquivos. Como a DistCp pode atribuir apenas um mapeador a um arquivo, isso limita a quantidade de simultaneidade que pode ser usada para copiar arquivos grandes.

  • Se você tiver um pequeno número de arquivos grandes, divida-os em partes de arquivo de 256 MB para obter maior possibilidade de simultaneidade.

  • Se você estiver copiando de uma conta de armazenamento de Blobs do Azure, seu trabalho de cópia poderá ficar limitado do lado do armazenamento de Blobs. Isso pode degradar o desempenho do seu trabalho de cópia. Para saber mais sobre os limites do armazenamento de Blobs do Azure, confira limites de Armazenamento do Azure em Limites de serviço e assinatura do Azure.

Confira também