Share via


Utilizar o DistCp para copiar dados entre Blobs de Armazenamento do Azure e Azure Data Lake Storage Gen2

Pode utilizar o DistCp para copiar dados entre uma conta de armazenamento V2 para fins gerais e uma conta de armazenamento V2 para fins gerais com o espaço de nomes hierárquico ativado. Este artigo fornece instruções sobre como utilizar a ferramenta DistCp.

O DistCp fornece uma variedade de parâmetros de linha de comandos e recomendamos vivamente que leia este artigo para otimizar a sua utilização. Este artigo mostra funcionalidades básicas ao mesmo tempo que se concentra na sua utilização para copiar dados para uma conta com espaço de nomes hierárquico ativado.

Pré-requisitos

  • Uma subscrição do Azure. Para obter mais informações, veja Obter avaliação gratuita do Azure.
  • Uma conta de Armazenamento do Azure existente sem Data Lake Storage Gen2 capacidades (espaço de nomes hierárquico) ativada.
  • Uma conta de Armazenamento do Azure com capacidades de Data Lake Storage Gen2 (espaço de nomes hierárquico) ativadas. Para obter instruções sobre como criar uma, veja Criar uma conta de Armazenamento do Azure
  • Um contentor que foi criado na conta de armazenamento com o espaço de nomes hierárquico ativado.
  • Um cluster do Azure HDInsight com acesso a uma conta de armazenamento com a funcionalidade de espaço de nomes hierárquico ativada. Para obter mais informações, veja Utilizar o Azure Data Lake Storage Gen2 com clusters do Azure HDInsight. Certifique-se de que ativa o Ambiente de Trabalho Remoto para o cluster.

Utilizar o DistCp a partir de um cluster do HDInsight Linux

Um cluster do HDInsight é fornecido com o utilitário DistCp, que pode ser utilizado para copiar dados de diferentes origens para um cluster do HDInsight. Se tiver configurado o cluster do HDInsight para utilizar Armazenamento de Blobs do Azure e Azure Data Lake Storage em conjunto, o utilitário DistCp também pode ser utilizado para copiar dados. Nesta secção, vamos ver como utilizar o utilitário DistCp.

  1. Crie uma sessão SSH para o cluster HDI. Para obter mais informações, veja Ligar a um cluster do HDInsight baseado em Linux.

  2. Verifique se consegue aceder à sua conta V2 para fins gerais existente (sem o espaço de nomes hierárquico ativado).

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

    O resultado deve fornecer uma lista de conteúdos no contentor.

  3. Da mesma forma, verifique se consegue aceder à conta de armazenamento com o espaço de nomes hierárquico ativado 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 ficheiros/pastas na conta de armazenamento do Data Lake.

  4. Utilize o DistCp para copiar dados do WASB para uma conta Data Lake Storage.

    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 blobs para /myfolder na conta Data Lake Storage.

  5. Da mesma forma, utilize o DistCp para copiar dados de Data Lake Storage conta para o Armazenamento de Blobs (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 Data Lake Store para a pasta /example/data/gutenberg/ em WASB.

Considerações de desempenho ao utilizar o DistCp

Uma vez que a granularidade mais baixa do DistCp é um único ficheiro, definir o número máximo de cópias simultâneas é o parâmetro mais importante para o otimizar em relação Data Lake Storage. O número de cópias simultâneas é igual ao parâmetro número de mapeadores (m) na linha de comandos. Este parâmetro especifica o número máximo de mapeadores que são utilizados para copiar dados. O valor predefinido é 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 devo proceder para determinar o número de mapeadores a utilizar?

Eis algumas orientações que poderá utilizar.

  • Passo 1: determinar a memória total disponível para a fila da aplicação YARN "predefinida" – o primeiro passo é determinar a memória disponível para a fila da aplicação YARN "predefinida". Estas informações estão disponíveis no portal do Ambari associado ao cluster. Navegue para YARN e veja o separador Configurações para ver a memória do YARN disponível para a fila da aplicação "predefinida". Esta é a memória total disponível para a tarefa DistCp (que é, na verdade, uma tarefa do MapReduce).

  • Passo 2: Calcular o número de mapeadores – o valor de m é igual ao quociente da memória YARN total dividida pelo tamanho do contentor YARN. As informações sobre o tamanho do contentor do YARN também estão disponíveis no portal do Ambari. Navegue para YARN e veja o separador Configurações. O tamanho do contentor YARN é apresentado nesta janela. A equação a chegar ao número de mapeadores (m) é

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

Exemplo

Vamos supor que tem um cluster D14v2s 4x e que está a tentar transferir 10 TB de dados de 10 pastas diferentes. Cada uma das pastas contém diferentes quantidades de dados e os tamanhos de ficheiro em cada pasta são diferentes.

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

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

  • Número de mapeadores: No portal do Ambari, determina que o tamanho do contentor YARN é de 3072 MB para um nó de cluster D14. Assim, o número de mapeadores é:

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

Se outras aplicações estiverem a utilizar memória, pode optar por utilizar apenas uma parte da memória YARN do cluster para DistCp.

Copiar conjuntos de dados grandes

Quando o tamanho do conjunto de dados a mover for grande (por exemplo, >1 TB) ou se tiver muitas pastas diferentes, deve considerar a utilização de várias tarefas DistCp. É provável que não haja ganhos de desempenho, mas este distribui as tarefas para que, se algum trabalho falhar, só tenha de reiniciar esse trabalho específico em vez de todo o trabalho.

Limitações

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

  • O DistCp está limitado a apenas um mapeador por ficheiro. Por conseguinte, não deve ter mais mapeadores do que os ficheiros. Uma vez que o DistCp só pode atribuir um mapeador a um ficheiro, isto limita a quantidade de simultaneidade que pode ser utilizada para copiar ficheiros grandes.

  • Se tiver um pequeno número de ficheiros grandes, deve dividi-los em segmentos de ficheiros de 256 MB para lhe dar mais simultaneidade potencial.