Usare DistCp per copiare dati tra BLOB Archiviazione di Azure e Azure Data Lake Storage
È possibile usare DistCp per copiare i dati tra un account di archiviazione per utilizzo generico V2 e un account di archiviazione per utilizzo generico V2 con lo spazio dei nomi gerarchico abilitato. Questo articolo fornisce istruzioni su come usare lo strumento DistCp.
DistCp fornisce vari parametri della riga di comando ed è consigliabile leggere questo articolo per ottimizzarne l'utilizzo. Questo articolo illustra le funzionalità di base e, in particolare, illustra la copia dei dati in un account abilitato per lo spazio dei nomi gerarchico.
Prerequisiti
- Una sottoscrizione di Azure. Per altre informazioni, vedere Ottenere la versione di valutazione gratuita di Azure.
- Un account Archiviazione di Azure esistente senza abilitare le funzionalità di Data Lake Storage (spazio dei nomi gerarchico).
- Un account Archiviazione di Azure con le funzionalità di Data Lake Storage (spazio dei nomi gerarchico) abilitate. Per istruzioni su come crearne uno, vedere Creare un account di archiviazione di Azure
- Un contenitore creato nell'account di archiviazione con lo spazio dei nomi gerarchico abilitato.
- Un cluster Azure HDInsight con accesso a un account di archiviazione con la funzionalità dello spazio dei nomi gerarchico abilitata. Per altre informazioni, vedere Usare Azure Data Lake Storage con cluster Azure HDInsight. Assicurarsi di abilitare il Desktop remoto per il cluster.
Usare DistCp da un cluster HDInsight Linux
Un cluster HDInsight include l'utilità DistCp, che può essere usata per copiare i dati da diverse origini in un cluster HDInsight. Se il cluster HDInsight è stato configurato per l'uso di Archiviazione BLOB di Azure e Azure Data Lake Storage insieme, l'utilità DistCp può essere usata senza modifiche anche per copiare dati dall'uno all'altro. Questa sezione illustra come usare l'utilità DistCp.
Creare una sessione SSH per il cluster HDInsight. Per altre informazioni, vedere Connettersi a un cluster HDInsight basato su Linux.
Verificare se è possibile accedere all'account per utilizzo generico V2 esistente (senza spazio dei nomi gerarchico abilitato).
hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
L'output dovrebbe mostrare un elenco di contenuti del contenitore.
Analogamente, verificare se è possibile accedere all'account di archiviazione con lo spazio dei nomi gerarchico abilitato dal cluster. Esegui questo comando:
hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
L'output dovrebbe mostrare un elenco di file/cartelle nell'account Data Lake Storage.
Usare DistCp per copiare dati da BLOB di Windows Archiviazione di Azure (WASB) a un account 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
Il comando copia i contenuti della cartella /example/data/gutenberg/ dell'archivio BLOB in /myfolder nell'account Data Lake Storage.
Analogamente, usare DistCp per copiare dati dall'account Data Lake Storage al BLOB di archiviazione, ovvero 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
Il comando copia i contenuti di /myfolder nell'account Data Lake Store nella cartella /example/data/gutenberg/ in WASB.
Considerazioni sulle prestazioni per l'uso di DistCp
Dato che il livello di granularità minimo per DistCp corrisponde a un singolo file, l'impostazione del numero massimo di copie simultanee è il parametro più importante per eseguire l'ottimizzazione per Data Lake Storage. Il numero di copie simultanee è uguale al numero di mapper (m) 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 -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
Come determinare il numero di mapper da usare
Ecco alcune linee guida che è possibile usare.
Passaggio 1: Determinare la memoria totale disponibile per la coda dell'app YARN "default" - Il primo passaggio consiste nel determinare la memoria disponibile per la coda di app YARN "predefinita". Queste informazioni sono disponibili nel portale di Ambari associato al cluster. Passare a YARN e visualizzare la scheda Configs (Configurazioni) per visualizzare la memoria di YARN disponibile per la coda di app "predefinita". Si tratta della memoria totale disponibile per il processo DistCp (che è di fatto un processo MapReduce).
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. Anche queste informazioni sono disponibili 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 ottenere il numero di mapper (m) è
m = (numero di nodi * memoria YARN per ogni nodo) / dimensioni del contenitore YARN
Esempio
Si supponga di avere un cluster D14v2s 4x e si sta tentando di 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 è:
Memoria YARN = 4 * 96 GB = 384 GB
Numero di mapper: dal portale di Ambari si determina che le dimensioni del contenitore YARN sono pari a 3.072 MB per un nodo del cluster D14. Il numero di mapper è quindi:
m = (quattro nodi * 96 GB) / 3072 MB = 128 mapper
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. È probabile che non si verifichi alcun miglioramento delle prestazioni, ma distribuisce i processi in modo che, se un processo non riesce, è sufficiente riavviare tale processo specifico anziché l'intero processo.
Limiti
DistCp tenta di creare mapper con dimensioni simili per ottimizzare le prestazioni. L'aumento del numero di mapper potrebbe non sempre migliorare le prestazioni.
DistCp è limitato a un solo mapper per file, Pertanto, non è consigliabile avere più mapper di file. Dato che DistCp può assegnare un solo mapper a un file, ciò comporta una limitazione alla concorrenza utilizzabile per la copia di file di grandi dimensioni.
Se si dispone di alcuni file di grandi dimensioni, è necessario suddividerli in blocchi di file da 256 MB per offrire maggiore concorrenza potenziale.