Partilhar via


Usar o DistCp para copiar dados entre os Blobs de Armazenamento do Azure e o Armazenamento do Azure Data Lake

Você pode usar o DistCp para copiar dados entre uma conta de armazenamento V2 de uso geral e uma conta de armazenamento V2 de uso geral com namespace hierárquico habilitado. Este artigo fornece instruções sobre como usar a ferramenta DistCp.

O DistCp fornece vários parâmetros de linha de comando e recomendamos vivamente que leia este artigo para otimizar a sua utilização. Este artigo mostra a funcionalidade básica enquanto se concentra em seu uso para copiar dados para uma conta habilitada para namespace hierárquico.

Pré-requisitos

  • Uma subscrição do Azure. Para obter mais informações, consulte Obter avaliação gratuita do Azure.
  • Uma conta de Armazenamento do Azure existente sem recursos de Armazenamento Data Lake (namespace hierárquico) habilitado.
  • Uma conta de Armazenamento do Azure com recursos de Armazenamento Data Lake (namespace hierárquico) habilitados. Para obter instruções sobre como criar uma, consulte Criar uma conta de Armazenamento do Azure
  • Um contêiner que foi criado na conta de armazenamento com namespace hierárquico habilitado.
  • Um cluster do Azure HDInsight com acesso a uma conta de armazenamento com o recurso de namespace hierárquico habilitado. Para obter mais informações, consulte Usar o Armazenamento do Azure Data Lake com clusters do Azure HDInsight. Certifique-se de ativar a Área de Trabalho Remota para o cluster.

Usar o DistCp de um cluster Linux do HDInsight

Um cluster HDInsight vem com o utilitário DistCp, que pode ser usado para copiar dados de diferentes fontes para um cluster HDInsight. Se você configurou o cluster HDInsight para usar o Armazenamento de Blobs do Azure e o Armazenamento do Azure Data Lake juntos, o utilitário DistCp também pode ser usado imediatamente para copiar dados entre eles. Nesta seção, veremos como usar o utilitário DistCp.

  1. Crie uma sessão SSH para o cluster HDInsight. Para obter mais informações, consulte Conectar-se a um cluster HDInsight baseado em Linux.

  2. Verifique se você pode acessar sua conta V2 de uso geral existente (sem namespace hierárquico habilitado).

    hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
    

    A saída deve fornecer uma lista de conteúdo no recipiente.

  3. Da mesma forma, verifique se você pode acessar a conta de armazenamento com namespace hierárquico habilitado a partir do cluster. Execute o seguinte comando:

    hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
    

    A saída deve fornecer uma lista de arquivos/pastas na conta de armazenamento Data Lake.

  4. Use o DistCp para copiar dados do Windows Azure Storage Blob (WASB) para uma conta de Armazenamento Data Lake.

    hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
    

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

  5. Da mesma forma, use o DistCp para copiar dados da conta do Data Lake Storage para o Blob Storage (WASB).

    hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
    

    O comando copia o conteúdo de /myfolder na conta do Repositório Data Lake para a pasta /example/data/gutenberg/ no WASB.

Considerações de desempenho ao usar o DistCp

Como a menor granularidade do DistCp é um único arquivo, definir o número máximo de cópias simultâneas é o parâmetro mais importante para otimizá-lo em relação ao Data Lake Storage. O número de cópias simultâneas é igual ao número de mapeadores (m) parâmetro na linha de comando. Este parâmetro especifica o número máximo de mapeadores usados para copiar dados. O valor padrão é 20.

Exemplo

hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder

Como faço para determinar o número de mapeadores a serem usados?

Eis algumas orientações que poderá utilizar.

  • Etapa 1: Determinar a memória total disponível para a fila de aplicativos YARN 'padrão' - A primeira etapa é determinar a memória disponível para a fila de aplicativos YARN 'padrão'. Essas informações estão disponíveis no portal Ambari associado ao cluster. Navegue até YARN e visualize a guia Configurações para ver a memória YARN disponível para a fila de aplicativos 'padrão'. Esta é a memória total disponível para seu trabalho DistCp (que na verdade é um trabalho MapReduce).

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

    m = (número de nós * memória YARN para cada nó) / tamanho do recipiente YARN

Exemplo

Vamos supor que você tenha um cluster D14v2s 4x e esteja tentando transferir 10 TB de dados de 10 pastas diferentes. Cada uma das pastas contém quantidades variáveis de dados e os tamanhos de arquivo dentro de cada pasta são diferentes.

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

    Memória YARN = 4 * 96 GB = 384 GB

  • Número de mapeadores: No portal Ambari, você determina que o tamanho do contêiner YARN é de 3.072 MB para um nó de cluster D14. Assim, o número de mapeadores é:

    m = (quatro nós * 96 GB) / 3072 MB = 128 mapeadores

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

Copiando grandes conjuntos de dados

Quando o tamanho do conjunto de dados a ser movido é grande (por exemplo, >1 TB) ou se você tiver muitas pastas diferentes, considere o uso de vários trabalhos DistCp. Provavelmente não há ganho de desempenho, mas ele distribui os trabalhos de modo que, se algum trabalho falhar, você só precisa reiniciar esse trabalho específico, em vez de todo o trabalho.

Limitações

  • O DistCp tenta criar mapeadores de tamanho semelhante para otimizar o desempenho. Aumentar o número de mapeadores nem sempre pode aumentar o desempenho.

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

  • Se você tiver alguns arquivos grandes, então você deve dividi-los em blocos de arquivo de 256 MB para lhe dar mais simultaneidade potencial.