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
- Uma subscrição do Azure. Consulte Obter versão de avaliação gratuita do Azure.
- Uma conta Azure Data Lake Storage Gen1. Para obter instruções sobre como criar uma, consulte Introdução ao Azure Data Lake Storage Gen1.
- Cluster do Azure HDInsight com acesso a uma conta Data Lake Storage Gen1. Veja Criar um cluster do HDInsight com Data Lake Storage Gen1. 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 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.
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.
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.
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.
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.
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.