Utilizar o DistCp para copiar dados entre os blobs de Armazenamento do Azure e o Azure Data Lake Storage Gen1

Se tiver um cluster do HDInsight com acesso ao Azure Data Lake Storage Gen1, pode utilizar ferramentas de ecossistema do Hadoop, como o DistCp, para copiar dados de e para um armazenamento de cluster do HDInsight (WASB) para uma conta Data Lake Storage Gen1. Este artigo mostra como utilizar a ferramenta DistCp.

Pré-requisitos

Utilizar o DistCp a partir de um cluster do HDInsight Linux

Um cluster do HDInsight é fornecido com a ferramenta DistCp, que pode ser utilizada para copiar dados de diferentes origens para um cluster do HDInsight. Se tiver configurado o cluster do HDInsight para utilizar Data Lake Storage Gen1 como armazenamento adicional, pode utilizar o DistCp fora da caixa para copiar dados de e para uma conta Data Lake Storage Gen1. Nesta secção, vamos ver como utilizar a ferramenta DistCp.

  1. A partir do ambiente de trabalho, utilize o SSH para ligar ao cluster. Veja Ligar a um cluster do HDInsight baseado em Linux. Execute os comandos a partir da linha de comandos SSH.

  2. Verifique se consegue aceder aos blobs de Armazenamento do Azure (WASB). Execute o seguinte comando:

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

    O resultado fornece uma lista de conteúdos no blob de armazenamento.

  3. Da mesma forma, verifique se pode aceder à conta Data Lake Storage Gen1 a partir do cluster. Execute o seguinte comando:

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

    O resultado fornece uma lista de ficheiros e pastas na conta Data Lake Storage Gen1.

  4. Utilize o DistCp para copiar dados do WASB para uma conta 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/ em WASB para /myfolder na conta do Data Lake Storage Gen1.

  5. Da mesma forma, utilize o DistCp para copiar dados de uma conta Data Lake Storage Gen1 para 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 na conta Data Lake Storage Gen1 para a pasta /example/data/gutenberg/ no WASB.

Considerações de desempenho ao utilizar o DistCp

Uma vez que a granularidade mais baixa da ferramenta 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 a Data Lake Storage Gen1. Pode controlar o número de cópias simultâneas ao definir o 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 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 utilizar

Eis algumas orientações que poderá utilizar.

  • Passo 1: determinar a memória yarn total – o primeiro passo é determinar a memória YARN disponível para o cluster onde executa a tarefa DistCp. 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. Para obter a memória yarn total, multiplique a memória YARN por nó com o número de nós que tem no cluster.

  • 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 = (number of nodes * YARN memory for each node) / YARN container size

Exemplo:

Vamos supor que tem quatro nós D14v2s no cluster e quer 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 do YARN é de 96 GB para um nó D14. Assim, a memória total do YARN para quatro clusters de nós é:

    YARN memory = 4 * 96GB = 384GB

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

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

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, considere utilizar várias tarefas DistCp. É provável que não haja ganhos de desempenho, mas distribui os trabalhos para que, se algum trabalho falhar, só tenha de reiniciar essa tarefa específica em vez de toda a tarefa.

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 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, divida-os em segmentos de ficheiro de 256 MB para lhe dar mais simultaneidade potencial.

  • Se estiver a copiar a partir de uma conta de armazenamento de Blobs do Azure, a tarefa de cópia poderá estar limitada no lado do armazenamento de Blobs. Isto degrada o desempenho da tarefa de cópia. Para saber mais sobre os limites do armazenamento de Blobs do Azure, veja Limites do Armazenamento do Azure em Subscrição do Azure e limites de serviço.

Ver também