Migreren van on-premises HDFS-archief naar Azure Storage met Azure Data Box

U kunt gegevens migreren van een on-premises HDFS-archief van uw Hadoop-cluster naar Azure Storage (blobopslag of Data Lake Storage Gen2) met behulp van een Data Box-apparaat. U kunt kiezen uit Data Box Disk, een Data Box van 80 TB of een Data Box Heavy van 770 TB.

Dit artikel helpt u bij het voltooien van deze taken:

  • Voorbereiden om uw gegevens te migreren
  • Uw gegevens kopiëren naar een Data Box Disk-, Data Box- of Data Box Heavy-apparaat
  • Het apparaat terugsturen naar Microsoft
  • Toegangsmachtigingen toepassen op bestanden en mappen (alleen Data Lake Storage Gen2)

Vereisten

U hebt deze dingen nodig om de migratie te voltooien.

Als u klaar bent, gaan we beginnen.

Uw gegevens kopiëren naar een Data Box-apparaat

Als uw gegevens in één Data Box-apparaat passen, kopieert u de gegevens naar het Data Box-apparaat.

Als uw gegevens groter zijn dan de capaciteit van het Data Box-apparaat, gebruikt u de optionele procedure om de gegevens te splitsen over meerdere Data Box-apparaten en voert u deze stap uit.

Als u de gegevens uit uw on-premises HDFS-archief wilt kopiëren naar een Data Box-apparaat, stelt u een paar dingen in en gebruikt u vervolgens het hulpprogramma DistCp .

Volg deze stappen om gegevens te kopiëren via de REST API's van Blob/Object Storage naar uw Data Box-apparaat. De REST API-interface zorgt ervoor dat het apparaat wordt weergegeven als een HDFS-archief in uw cluster.

  1. Voordat u de gegevens kopieert via REST, moet u de beveiligings- en verbindingsprimitief identificeren om verbinding te maken met de REST-interface op de Data Box of Data Box Heavy. Meld u aan bij de lokale webgebruikersinterface van Data Box en ga naar Verbinding maken en kopieer de pagina. Zoek en selecteer REST op basis van de Azure-opslagaccounts voor uw apparaat, zoek en selecteer REST.

  2. Kopieer in het dialoogvenster Opslagaccount van Access en het uploaden van gegevens het Blob-service-eindpunt en de sleutel van het opslagaccount. Laat vanaf het blob-service-eindpunt de https:// en de afsluitende slash weg.

    In dit geval is het eindpunt: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Het hostgedeelte van de URI die u gebruikt, is: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Zie voor een voorbeeld hoe u Verbinding maken naar REST via http.

  3. Voeg het eindpunt en het IP-adres van het Data Box- of Data Box Heavy-knooppunt toe aan /etc/hosts elk knooppunt.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Als u een ander mechanisme voor DNS gebruikt, moet u ervoor zorgen dat het Data Box-eindpunt kan worden omgezet.

  4. Stel de shell-variabele azjars in op de locatie van de hadoop-azure en azure-storage JAR-bestanden. U vindt deze bestanden onder de installatiemap van Hadoop.

    Gebruik de volgende opdracht om te bepalen of deze bestanden bestaan: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure Vervang de <hadoop_install_dir> tijdelijke aanduiding door het pad naar de map waarin u Hadoop hebt geïnstalleerd. Zorg ervoor dat u volledig gekwalificeerde paden gebruikt.

    Voorbeelden:

    azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar

  5. Maak de opslagcontainer die u wilt gebruiken voor het kopiëren van gegevens. U moet ook een doelmap opgeven als onderdeel van deze opdracht. Dit kan op dit moment een dummy-doelmap zijn.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -mkdir -p  wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Vervang de <blob_service_endpoint> tijdelijke aanduiding door de naam van uw blobservice-eindpunt.

    • Vervang de <account_key> tijdelijke aanduiding door de toegangssleutel van uw account.

    • Vervang de <container-name> tijdelijke aanduiding door de naam van uw container.

    • Vervang de <destination_directory> tijdelijke aanduiding door de naam van de map waarnaar u de gegevens wilt kopiëren.

  6. Voer een lijstopdracht uit om ervoor te zorgen dat uw container en map zijn gemaakt.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -ls -R  wasb://<container_name>@<blob_service_endpoint>/
    
    • Vervang de <blob_service_endpoint> tijdelijke aanduiding door de naam van uw blobservice-eindpunt.

    • Vervang de <account_key> tijdelijke aanduiding door de toegangssleutel van uw account.

    • Vervang de <container-name> tijdelijke aanduiding door de naam van uw container.

  7. Kopieer gegevens van Hadoop HDFS naar Data Box Blob Storage naar de container die u eerder hebt gemaakt. Als de map waarnaar u kopieert niet wordt gevonden, wordt deze automatisch gemaakt met de opdracht.

    hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \
    -filters <exclusion_filelist_file> \
    [-f filelist_file | /<source_directory> \
           wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Vervang de <blob_service_endpoint> tijdelijke aanduiding door de naam van uw blobservice-eindpunt.

    • Vervang de <account_key> tijdelijke aanduiding door de toegangssleutel van uw account.

    • Vervang de <container-name> tijdelijke aanduiding door de naam van uw container.

    • Vervang de <exlusion_filelist_file> tijdelijke aanduiding door de naam van het bestand dat de lijst met bestandsuitsluitingen bevat.

    • Vervang de <source_directory> tijdelijke aanduiding door de naam van de map die de gegevens bevat die u wilt kopiëren.

    • Vervang de <destination_directory> tijdelijke aanduiding door de naam van de map waarnaar u de gegevens wilt kopiëren.

    De -libjars optie wordt gebruikt om de hadoop-azure*.jar en de afhankelijke azure-storage*.jar bestanden beschikbaar te maken voor distcp. Dit kan al gebeuren voor sommige clusters.

    In het volgende voorbeeld ziet u hoe de distcp opdracht wordt gebruikt om gegevens te kopiëren.

     hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \
    -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \
    /data/testfiles \
    wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
    

    De kopieersnelheid verbeteren:

    • Probeer het aantal mappers te wijzigen. (Het standaardaantal mappers is 20. In het bovenstaande voorbeeld wordt gebruikgemaakt m van = 4 mappers.)

    • Probeer -D fs.azure.concurrentRequestCount.out=<thread_number> het. Vervang <thread_number> door het aantal threads per mapper. Het product van het aantal mappers en het aantal threads per mapper mag m*<thread_number>niet groter zijn dan 32.

    • Probeer meerdere distcp parallel uit te voeren.

    • Houd er rekening mee dat grote bestanden beter presteren dan kleine bestanden.

    • Als u bestanden hebt die groter zijn dan 200 GB, raden we u aan om de blokgrootte te wijzigen in 100 MB met de volgende parameters:

    hadoop distcp \ 
    -libjars $azjars \ 
    -Dfs.azure.write.request.size= 104857600 \ 
    -Dfs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ 
    -Dfs.azure.account.key.<blob_service_endpoint<>=<account_key> \ 
    -strategy dynamic \ 
    -Dmapreduce.map.memory.mb=16384 \ 
    -Dfs.azure.concurrentRequestCount.out=8 \ 
    -Dmapreduce.map.java.opts=-Xmx8196m \ 
    -m 4 \ 
    -update \ 
    /data/bigfile wasb://hadoop@mystorageaccount.blob.core.windows.net/bigfile
    

De Data Box verzenden naar Microsoft

Volg deze stappen om het Data Box-apparaat voor te bereiden en naar Microsoft te verzenden.

  1. Bereid u eerst voor op verzending op uw Data Box of Data Box Heavy.

  2. Nadat de voorbereiding van het apparaat is voltooid, downloadt u de BOM-bestanden. U gebruikt deze BOM- of manifestbestanden later om de gegevens te controleren die naar Azure zijn geüpload.

  3. Sluit het apparaat af en verwijder de kabels.

  4. Maak een afspraak met UPS om het pakket op te laten halen.

  5. Nadat Microsoft uw apparaat heeft ontvangen, is het verbonden met het datacenternetwerk en worden de gegevens geüpload naar het opslagaccount dat u hebt opgegeven toen u de apparaatorder hebt geplaatst. Controleer op basis van de BOM-bestanden of al uw gegevens naar Azure zijn geüpload.

Toegangsmachtigingen toepassen op bestanden en mappen (alleen Data Lake Storage Gen2)

U hebt de gegevens al in uw Azure Storage-account. Nu past u toegangsmachtigingen toe op bestanden en mappen.

Notitie

Deze stap is alleen nodig als u Azure Data Lake Storage Gen2 als uw gegevensarchief gebruikt. Als u alleen een Blob Storage-account gebruikt zonder hiërarchische naamruimte als uw gegevensarchief, kunt u deze sectie overslaan.

Een service-principal maken voor uw account met Azure Data Lake Storage Gen2

Zie Instructies voor het maken van een service-principal: Gebruik de portal om een Microsoft Entra-toepassing en service-principal te maken die toegang heeft tot resources.

  • Wanneer u de stappen uitvoert in de sectie De toepassing toewijzen aan een rol van het artikel, moet u ervoor zorgen dat de rol Gegevensbijdrager voor opslagblob is toegewezen aan de service-principal.

  • Wanneer u de stappen uitvoert in de sectie Waarden ophalen voor aanmelding in het artikel, slaat u de toepassings-id en waarden van het clientgeheim op in een tekstbestand. Je hebt die binnenkort nodig.

Een lijst met gekopieerde bestanden genereren met hun machtigingen

Voer vanuit het on-premises Hadoop-cluster deze opdracht uit:


sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json

Met deze opdracht wordt een lijst met gekopieerde bestanden met hun machtigingen gegenereerd.

Notitie

Afhankelijk van het aantal bestanden in de HDFS kan het lang duren voordat deze opdracht wordt uitgevoerd.

Een lijst met identiteiten genereren en deze toewijzen aan Microsoft Entra-identiteiten

  1. Download het copy-acls.py script. Zie de Helperscripts downloaden en stel uw Edge-knooppunt in om deze sectie van dit artikel uit te voeren.

  2. Voer deze opdracht uit om een lijst met unieke identiteiten te genereren.

    
    ./copy-acls.py -s ./filelist.json -i ./id_map.json -g
    

    Met dit script wordt een bestand gegenereerd id_map.json met de identiteiten die u moet toewijzen aan op ADD gebaseerde identiteiten.

  3. Open het id_map.json bestand in een teksteditor.

  4. Werk voor elk JSON-object dat in het bestand wordt weergegeven, het target kenmerk van een Microsoft Entra user Principal Name (UPN) of ObjectId (OID) bij met de juiste toegewezen identiteit. Sla het bestand op nadat u klaar bent. U hebt dit bestand nodig in de volgende stap.

Machtigingen toepassen op gekopieerde bestanden en identiteitstoewijzingen toepassen

Voer deze opdracht uit om machtigingen toe te passen op de gegevens die u naar het Data Lake Storage Gen2-account hebt gekopieerd:

./copy-acls.py -s ./filelist.json -i ./id_map.json  -A <storage-account-name> -C <container-name> --dest-spn-id <application-id>  --dest-spn-secret <client-secret>
  • Vervang de tijdelijke plaatsaanduiding <storage-account-name> door de naam van uw opslagaccount.

  • Vervang de <container-name> tijdelijke aanduiding door de naam van uw container.

  • Vervang de <application-id> tijdelijke aanduidingen door <client-secret> de toepassings-id en het clientgeheim dat u hebt verzameld toen u de service-principal maakte.

Bijlage: Gegevens splitsen over meerdere Data Box-apparaten

Voordat u uw gegevens naar een Data Box-apparaat verplaatst, moet u enkele helperscripts downloaden, ervoor zorgen dat uw gegevens zijn geordend om op een Data Box-apparaat te passen en overbodige bestanden uit te sluiten.

Helperscripts downloaden en uw Edge-knooppunt instellen om ze uit te voeren

  1. Voer vanaf het edge- of hoofdknooppunt van uw on-premises Hadoop-cluster de volgende opdracht uit:

    
    git clone https://github.com/jamesbak/databox-adls-loader.git
    cd databox-adls-loader
    

    Met deze opdracht wordt de GitHub-opslagplaats gekloond die de helperscripts bevat.

  2. Zorg ervoor dat het jq-pakket is geïnstalleerd op uw lokale computer.

    
    sudo apt-get install jq
    
  3. Installeer het Python-pakket Aanvragen .

    
    pip install requests
    
  4. Stel uitvoermachtigingen in voor de vereiste scripts.

    
    chmod +x *.py *.sh
    
    

Zorg ervoor dat uw gegevens zijn ingedeeld zodat ze op een Data Box-apparaat passen

Als de grootte van uw gegevens groter is dan één Data Box-apparaat, kunt u bestanden opsplitsen in groepen die u op meerdere Data Box-apparaten kunt opslaan.

Als uw gegevens niet groter zijn dan de grootte van een inge Data Box-apparaat, kunt u doorgaan naar de volgende sectie.

  1. Voer met verhoogde machtigingen het generate-file-list script uit dat u hebt gedownload door de richtlijnen in de vorige sectie te volgen.

    Hier volgt een beschrijving van de opdrachtparameters:

    sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME]
                     [-f LOG_CONFIG] [-l LOG_FILE]
                     [-v {DEBUG,INFO,WARNING,ERROR}]
                     path
    
    where:
    positional arguments:
    path                  The base HDFS path to process.
    
    optional arguments:
    -h, --help            show this help message and exit
    -s DATABOX_SIZE, --databox-size DATABOX_SIZE
                         The size of each Data Box in bytes.
    -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME
                         The base name for the output filelists. Lists will be
                         named basename1, basename2, ... .
    -f LOG_CONFIG, --log-config LOG_CONFIG
                         The name of a configuration file for logging.
    -l LOG_FILE, --log-file LOG_FILE
                         Name of file to have log output written to (default is
                         stdout/stderr)
    -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR}
                         Level of log information to output. Default is 'INFO'.
    
  2. Kopieer de gegenereerde bestandslijsten naar HDFS zodat ze toegankelijk zijn voor de DistCp-taak .

    hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
    

Onnodige bestanden uitsluiten

U moet sommige mappen uitsluiten van de DisCp-taak. Sluit bijvoorbeeld mappen uit die statusinformatie bevatten die het cluster actief houden.

Maak op het on-premises Hadoop-cluster waar u de DistCp-taak wilt initiëren een bestand met de lijst met mappen die u wilt uitsluiten.

Hier volgt een voorbeeld:

.*ranger/audit.*
.*/hbase/data/WALs.*

Volgende stappen

Meer informatie over hoe Data Lake Storage Gen2 werkt met HDInsight-clusters. Zie Azure Data Lake Storage Gen2 gebruiken met Azure HDInsight-clusters gebruiken voor meer informatie.