DistCp gebruiken om gegevens te kopiëren tussen Azure Storage-blobs en Azure Data Lake Storage
U kunt DistCp gebruiken om gegevens te kopiëren tussen een V2-opslagaccount voor algemeen gebruik en een V2-opslagaccount voor algemeen gebruik waarvoor hiërarchische naamruimte is ingeschakeld. In dit artikel vindt u instructies voor het gebruik van het hulpprogramma DistCp.
DistCp biedt diverse opdrachtregelparameters en we raden u ten zeerste aan dit artikel te lezen om uw gebruik ervan te optimaliseren. In dit artikel ziet u de basisfunctionaliteit terwijl u zich richt op het gebruik ervan voor het kopiëren van gegevens naar een hiërarchisch naamruimteaccount waarvoor een account is ingeschakeld.
Vereisten
- Een Azure-abonnement. Zie Gratis proefversie van Azure downloaden voor meer informatie.
- Een bestaand Azure Storage-account zonder Data Lake Storage-mogelijkheden (hiërarchische naamruimte) ingeschakeld.
- Een Azure Storage-account met Data Lake Storage-mogelijkheden (hiërarchische naamruimte) ingeschakeld. Zie Een Azure Storage-account maken voor instructies over het maken van een account
- Een container die is gemaakt in het opslagaccount waarvoor hiërarchische naamruimte is ingeschakeld.
- Een Azure HDInsight-cluster met toegang tot een opslagaccount waarvoor de hiërarchische naamruimtefunctie is ingeschakeld. Zie Azure Data Lake Storage gebruiken met Azure HDInsight-clusters voor meer informatie. Zorg ervoor dat u Extern bureaublad inschakelt voor het cluster.
DistCp gebruiken vanuit een HDInsight Linux-cluster
Een HDInsight-cluster wordt geleverd met het hulpprogramma DistCp, dat kan worden gebruikt om gegevens uit verschillende bronnen te kopiëren naar een HDInsight-cluster. Als u het HDInsight-cluster hebt geconfigureerd voor het gebruik van Azure Blob Storage en Azure Data Lake Storage, kan het hulpprogramma DistCp ook standaard worden gebruikt om gegevens te kopiëren. In deze sectie bekijken we hoe u het hulpprogramma DistCp gebruikt.
Maak een SSH-sessie naar uw HDI-cluster. Zie Verbinding maken met een HDInsight-cluster op basis van Linux voor meer informatie.
Controleer of u toegang hebt tot uw bestaande V2-account voor algemeen gebruik (zonder hiërarchische naamruimte ingeschakeld).
hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
De uitvoer moet een lijst met inhoud in de container bevatten.
Controleer ook of u toegang hebt tot het opslagaccount waarvoor hiërarchische naamruimte is ingeschakeld vanuit het cluster. Voer de volgende opdracht uit:
hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
De uitvoer moet een lijst met bestanden/mappen in het Data Lake-opslagaccount bevatten.
Gebruik DistCp om gegevens van WASB te kopiëren naar een Data Lake Storage-account.
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
Met de opdracht wordt de inhoud van de map /example/data/gutenberg/ in Blob Storage gekopieerd naar /myfolder in het Data Lake Storage-account.
Op dezelfde manier gebruikt u DistCp om gegevens van het Data Lake Storage-account te kopiëren naar Blob Storage (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
Met de opdracht wordt de inhoud van /myfolder in het Data Lake Store-account gekopieerd naar de map /example/data/gutenberg/ in WASB.
Prestatieoverwegingen bij het gebruik van DistCp
Omdat distCp's laagste granulariteit één bestand is, is het instellen van het maximum aantal gelijktijdige kopieën de belangrijkste parameter om deze te optimaliseren voor Data Lake Storage. Het aantal gelijktijdige kopieën is gelijk aan het aantal mappers (m) parameter op de opdrachtregel. Met deze parameter geeft u het maximum aantal mappers op dat wordt gebruikt voor het kopiëren van gegevens. De standaardwaarde is 20.
Voorbeeld
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
Hoe kan ik het aantal mappers bepalen dat moet worden gebruikt?
Hier volgen een aantal richtlijnen.
Stap 1: Bepaal het totale geheugen dat beschikbaar is voor de 'standaard' YARN-app-wachtrij . De eerste stap is het bepalen van het geheugen dat beschikbaar is voor de 'standaard' YARN-app-wachtrij. Deze informatie is beschikbaar in de Ambari-portal die is gekoppeld aan het cluster. Navigeer naar YARN en bekijk het tabblad Configuraties om het YARN-geheugen weer te geven dat beschikbaar is voor de 'standaard'-app-wachtrij. Dit is het totale beschikbare geheugen voor uw DistCp-taak (dit is eigenlijk een MapReduce-taak).
Stap 2: het aantal mappers berekenen: de waarde van m is gelijk aan het quotiënt van het totale YARN-geheugen gedeeld door de YARN-containergrootte. De informatie over de grootte van de YARN-container is ook beschikbaar in de Ambari-portal. Navigeer naar YARN en bekijk het tabblad Configuraties. De GROOTTE van de YARN-container wordt weergegeven in dit venster. De vergelijking die moet worden berekend op het aantal mappers (m) is
m = (aantal knooppunten * YARN-geheugen voor elk knooppunt) / YARN-containergrootte
Voorbeeld
Stel dat u een 4x D14v2s-cluster hebt en dat u 10 TB aan gegevens uit 10 verschillende mappen wilt overdragen. Elk van de mappen bevat verschillende hoeveelheden gegevens en de bestandsgrootten in elke map zijn verschillend.
Totaal YARN-geheugen: In de Ambari-portal bepaalt u dat het YARN-geheugen 96 GB is voor een D14-knooppunt. Het totale YARN-geheugen voor vier knooppuntclusters is dus:
YARN-geheugen = 4 * 96 GB = 384 GB
Aantal mappers: In de Ambari-portal bepaalt u dat de YARN-containergrootte 3072 MB is voor een D14-clusterknooppunt. Het aantal mappers is dus:
m = (4 knooppunten * 96 GB) / 3072 MB = 128 mappers
Als andere toepassingen geheugen gebruiken, kunt u ervoor kiezen om alleen een deel van het YARN-geheugen van uw cluster te gebruiken voor DistCp.
Grote gegevenssets kopiëren
Wanneer de grootte van de gegevensset die moet worden verplaatst, groot is (bijvoorbeeld >1 TB) of als u veel verschillende mappen hebt, kunt u overwegen om meerdere DistCp-taken te gebruiken. Er is waarschijnlijk geen prestatiewinst, maar het verspreidt de taken, zodat als een taak mislukt, u die specifieke taak alleen opnieuw hoeft te starten in plaats van de hele taak.
Beperkingen
DistCp probeert mappers te maken die vergelijkbaar zijn met de grootte om de prestaties te optimaliseren. Het verhogen van het aantal mappers verhoogt mogelijk niet altijd de prestaties.
DistCp is beperkt tot slechts één mapper per bestand. Daarom moet u niet meer mappers hebben dan u bestanden hebt. Aangezien DistCp slechts één mapper aan een bestand kan toewijzen, beperkt dit de hoeveelheid gelijktijdigheid die kan worden gebruikt voor het kopiëren van grote bestanden.
Als u een klein aantal grote bestanden hebt, moet u ze opsplitsen in bestandssegmenten van 256 MB om u meer potentiële gelijktijdigheid te bieden.