Usare DistCp per copiare i dati tra BLOB di archiviazione di Azure e Azure Data Lake Storage Gen1

Se si dispone di un cluster HDInsight con accesso a Azure Data Lake Storage Gen1, è possibile usare gli strumenti dell'ecosistema Hadoop come DistCp per copiare i dati da e verso un archivio cluster HDInsight (WASB) in un account Data Lake Storage Gen1. Questo articolo illustra come usare lo strumento DistCp.

Prerequisiti

Usare DistCp da un cluster HDInsight Linux

Un cluster HDInsight include lo strumento DistCp, che può essere usato per copiare i dati da origini diverse in un cluster HDInsight. Se il cluster HDInsight è stato configurato per l'uso di Data Lake Storage Gen1 come risorsa di archiviazione aggiuntiva, è possibile usare DistCp out-of-the-box per copiare i dati da e verso un account Data Lake Storage Gen1. In questa sezione viene illustrato come usare lo strumento DistCp.

  1. Dal desktop usare SSH per connettersi al cluster. Vedere Connettersi a un cluster HDInsight basato su Linux. Eseguire i comandi dal prompt SSH.

  2. Verificare se è possibile accedere ai BLOB di Archiviazione di Azure (WASB). Eseguire il comando seguente:

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

    L'output fornisce un elenco di contenuti nel BLOB di archiviazione.

  3. Analogamente, verificare se è possibile accedere all'account di Data Lake Storage Gen1 dal cluster. Eseguire il comando seguente:

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

    L'output fornisce un elenco di file e cartelle nell'account Data Lake Storage Gen1.

  4. Usare DistCp per copiare i dati da WASB a un account 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
    

    Il comando copia i contenuti della cartella /esempio/data/gutenberg/ della cartella in WASB in /myfolder nell'account Data Lake Storage Gen1.

  5. Analogamente, usare DistCp per copiare i dati da un account Data Lake Storage Gen1 a 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
    

    Il comando copia il contenuto di /myfolder nell'account Data Lake Storage Gen1 nella cartella /example/data/gutenberg/ in WASB.

Considerazioni sulle prestazioni per l'uso di DistCp

Poiché la granularità minima dello strumento DistCp è un singolo file, impostando il numero massimo di copie simultanee è il parametro più importante per ottimizzarlo rispetto a Data Lake Storage Gen1. È possibile controllare il numero di copie simultanee impostando il numero di mapper ('m') parametro nella riga di comando. Questo parametro specifica il numero massimo di mapper usati per la copia dei dati. Il valore predefinito è 20.

Esempio:

 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

Come determinare il numero di mappatori da usare

Ecco alcune linee guida che è possibile usare.

  • Passaggio 1: determinare la memoria totale di YARN - il primo passaggio consiste nel determinare la memoria di YARN disponibile per il cluster in cui viene eseguito il processo DistCp. Queste informazioni sono disponibili nel portale di Ambari associato al cluster. Passare a YARN e visualizzare la scheda Configurazioni per visualizzare la memoria YARN. Per ottenere la memoria totale di YARN, moltiplicare la memoria di YARN per ogni nodo per il numero di nodi nel cluster.

  • Passaggio 2: Calcolare il numero di mapper. Il valore di m è uguale al quoziente della memoria totale di YARN divisa per le dimensioni del contenitore YARN. Le informazioni sulle dimensioni del contenitore YARN sono disponibili anche nel portale di Ambari. Passare a YARN e visualizzare la scheda Configurazioni . Le dimensioni del contenitore YARN vengono visualizzate in questa finestra. L'equazione per arrivare al numero di mappatori (m) è:

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

Esempio:

Si supponga di avere quattro nodi D14v2s nel cluster e si vuole trasferire 10 TB di dati da 10 cartelle diverse. Ogni cartella contiene quantità variabili di dati e le dimensioni dei file all'interno di ogni cartella sono diverse.

  • Memoria di YARN totale - Dal portale di Ambari si stabilisce che la memoria di YARN è pari a 96 GB per un nodo D14. Pertanto, la memoria totale di YARN per un cluster a quattro nodi è:

    YARN memory = 4 * 96GB = 384GB

  • Numero di mapper - Dal portale di Ambari si stabilisce che le dimensioni del contenitore YARN sono 3072 per un nodo del cluster D14. Quindi, il numero di mappatori è:

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

Se altre applicazioni usano memoria, è possibile scegliere di usare solo una parte della memoria YARN del cluster per DistCp.

Copia di set di dati di grandi dimensioni

Quando le dimensioni del set di dati da spostare sono grandi (ad esempio > 1 TB) o se sono presenti molte cartelle diverse, è consigliabile usare più processi DistCp. Probabilmente non esiste alcun miglioramento delle prestazioni, ma si distribuisce i processi in modo che, se un processo non riesce, è necessario riavviare solo il processo specifico anziché l'intero processo.

Limitazioni

  • DistCp tenta di creare mapper con dimensioni simili per ottimizzare le prestazioni. Un aumento del numero di mapper non sempre corrisponde a un miglioramento delle prestazioni.

  • DistCp è limitato a un solo mapper per file, Pertanto, non è consigliabile avere più mapping rispetto ai file. Poiché DistCp può assegnare un solo mapper a un file, questo limita la quantità di concorrenza che può essere usata per copiare file di grandi dimensioni.

  • Se si dispone di un numero ridotto di file di grandi dimensioni, suddividerli in blocchi di file da 256 MB per offrire una concorrenza più potenziale.

  • Se si esegue la copia da un account di archiviazione BLOB di Azure, il processo di copia può essere limitato sul lato archiviazione BLOB. In questo caso le prestazioni del processo di copia diminuiscono. Per altre informazioni sui limiti dell'archiviazione BLOB di Azure, vedere Limiti di archiviazione di Azure in sottoscrizione di Azure e limiti del servizio.

Vedi anche