Migrera från en lokal HDFS-butik till Azure Storage med Azure Data Box

Du kan migrera data från ett lokalt HDFS-lager för ditt Hadoop-kluster till Azure Storage (Blob Storage eller Data Lake Storage Gen2) med hjälp av en Data Box-enhet. Du kan välja mellan Data Box Disk, en 80 TB Data Box eller en 770 TB Data Box Heavy.

Den här artikeln hjälper dig att utföra följande uppgifter:

  • Förbereda migreringen av dina data
  • Kopiera dina data till en Data Box Disk, Data Box eller en Data Box Heavy-enhet
  • Skicka tillbaka enheten till Microsoft
  • Tillämpa åtkomstbehörigheter på filer och kataloger (endast Data Lake Storage Gen2)

Förutsättningar

Du behöver dessa saker för att slutföra migreringen.

Om du är redo börjar vi.

Kopiera dina data till en Data Box-enhet

Om dina data passar in i en enda Data Box-enhet kopierar du data till Data Box-enheten.

Om datastorleken överskrider Data Box-enhetens kapacitet använder du den valfria proceduren för att dela upp data mellan flera Data Box-enheter och utför sedan det här steget.

Om du vill kopiera data från ditt lokala HDFS-arkiv till en Data Box-enhet ställer du in några saker och använder sedan DistCp-verktyget .

Följ de här stegen för att kopiera data via REST-API:erna för Blob/Object Storage till din Data Box-enhet. REST API-gränssnittet gör att enheten visas som ett HDFS-arkiv i klustret.

  1. Innan du kopierar data via REST ska du identifiera säkerhets- och anslutningsprimiterna för att ansluta till REST-gränssnittet i Data Box eller Data Box Heavy. Logga in på det lokala webbgränssnittet för Data Box och gå till Anslut och kopiera sidan. Mot Azure Storage-kontona för din enhet går du till Åtkomstinställningar, letar upp och väljer REST.

  2. I dialogrutan Åtkomstlagringskonto och uppladdning av data kopierar du blobtjänstslutpunkten och lagringskontonyckeln. Från blobtjänstens slutpunkt utelämnar du det avslutande snedstrecket https:// och .

    I det här fallet är slutpunkten: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Värddelen av den URI som du använder är: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Ett exempel finns i hur du Anslut till REST via http.

  3. Lägg till slutpunkten och IP-adressen för /etc/hosts Data Box- eller Data Box Heavy-noden på varje nod.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Om du använder någon annan mekanism för DNS bör du se till att Data Box-slutpunkten kan matchas.

  4. Ange skalvariabeln azjars till platsen för hadoop-azure jar-filerna och azure-storage . Du hittar dessa filer under installationskatalogen för Hadoop.

    Använd följande kommando för att avgöra om dessa filer finns: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. <hadoop_install_dir> Ersätt platshållaren med sökvägen till katalogen där du har installerat Hadoop. Se till att använda fullständigt kvalificerade sökvägar.

    Exempel:

    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. Skapa den lagringscontainer som du vill använda för datakopiering. Du bör också ange en målkatalog som en del av det här kommandot. Det kan vara en dummy-målkatalog i det här läget.

    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>
    
    • <blob_service_endpoint> Ersätt platshållaren med namnet på blobtjänstens slutpunkt.

    • <account_key> Ersätt platshållaren med åtkomstnyckeln för ditt konto.

    • <container-name> Ersätt platshållaren med namnet på containern.

    • <destination_directory> Ersätt platshållaren med namnet på den katalog som du vill kopiera dina data till.

  6. Kör ett listkommando för att säkerställa att din container och katalog har skapats.

    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>/
    
    • <blob_service_endpoint> Ersätt platshållaren med namnet på blobtjänstens slutpunkt.

    • <account_key> Ersätt platshållaren med åtkomstnyckeln för ditt konto.

    • <container-name> Ersätt platshållaren med namnet på containern.

  7. Kopiera data från Hadoop HDFS till Data Box Blob Storage till containern som du skapade tidigare. Om katalogen som du kopierar till inte hittas skapar kommandot den automatiskt.

    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>
    
    • <blob_service_endpoint> Ersätt platshållaren med namnet på blobtjänstens slutpunkt.

    • <account_key> Ersätt platshållaren med åtkomstnyckeln för ditt konto.

    • <container-name> Ersätt platshållaren med namnet på containern.

    • <exlusion_filelist_file> Ersätt platshållaren med namnet på filen som innehåller din lista över filundantag.

    • <source_directory> Ersätt platshållaren med namnet på katalogen som innehåller de data som du vill kopiera.

    • <destination_directory> Ersätt platshållaren med namnet på den katalog som du vill kopiera dina data till.

    Alternativet -libjars används för att göra hadoop-azure*.jar och de beroende azure-storage*.jar filerna tillgängliga för distcp. Detta kan redan inträffa för vissa kluster.

    I följande exempel visas hur distcp kommandot används för att kopiera data.

     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
    

    Så här förbättrar du kopieringshastigheten:

    • Prova att ändra antalet mappare. (Standardantalet mappare är 20. Exemplet ovan använder m = 4 mappare.)

    • Prova -D fs.azure.concurrentRequestCount.out=<thread_number> . Ersätt <thread_number> med antalet trådar per mappare. Produkten av antalet mappare och antalet trådar per mappare, m*<thread_number>, får inte överstiga 32.

    • Prova att köra flera distcp parallellt.

    • Kom ihåg att stora filer presterar bättre än små filer.

    • Om du har filer som är större än 200 GB rekommenderar vi att du ändrar blockstorleken till 100 MB med följande parametrar:

    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
    

Skicka Data Box till Microsoft

Följ de här stegen för att förbereda och skicka Data Box-enheten till Microsoft.

  1. Börja med att förbereda för att skicka på din Data Box eller Data Box Heavy.

  2. När enhetsförberedelsen är klar laddar du ned BOM-filerna. Du använder dessa strukturlistefiler eller manifestfiler senare för att verifiera de data som laddats upp till Azure.

  3. Stäng av enheten och ta bort kablarna.

  4. Schemalägg en upphämtning med UPS.

  5. När Microsoft har fått din enhet är den ansluten till datacenternätverket och data laddas upp till det lagringskonto som du angav när du lade enhetsbeställningen. Kontrollera mot BOM-filerna att alla dina data laddas upp till Azure.

Tillämpa åtkomstbehörigheter på filer och kataloger (endast Data Lake Storage Gen2)

Du har redan data till ditt Azure Storage-konto. Nu använder du åtkomstbehörigheter för filer och kataloger.

Kommentar

Det här steget behövs bara om du använder Azure Data Lake Storage Gen2 som datalager. Om du bara använder ett bloblagringskonto utan hierarkiskt namnområde som datalager kan du hoppa över det här avsnittet.

Skapa ett huvudnamn för tjänsten för ditt Azure Data Lake Storage Gen2-aktiverat konto

Information om hur du skapar ett huvudnamn för tjänsten finns i How to: Use the portal to create a Microsoft Entra application and service principal that can access resources (Använda portalen för att skapa ett Microsoft Entra-program och tjänstens huvudnamn som kan komma åt resurser).

Generera en lista över kopierade filer med deras behörigheter

Kör det här kommandot från det lokala Hadoop-klustret:


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

Det här kommandot genererar en lista över kopierade filer med deras behörigheter.

Kommentar

Beroende på antalet filer i HDFS kan det här kommandot ta lång tid att köra.

Generera en lista över identiteter och mappa dem till Microsoft Entra-identiteter

  1. Ladda ned skriptet copy-acls.py . Se avsnittet Ladda ned hjälpskript och konfigurera gränsnoden för att köra dem i den här artikeln.

  2. Kör det här kommandot för att generera en lista över unika identiteter.

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

    Det här skriptet genererar en fil med namnet id_map.json som innehåller de identiteter som du behöver mappa till ADD-baserade identiteter.

  3. id_map.json Öppna filen i en textredigerare.

  4. För varje JSON-objekt som visas i filen uppdaterar target du attributet för antingen ett Microsoft Entra-användarhuvudnamn (UPN) eller ObjectId (OID) med lämplig mappad identitet. Spara filen när du är klar. Du behöver den här filen i nästa steg.

Tillämpa behörigheter på kopierade filer och tillämpa identitetsmappningar

Kör det här kommandot för att tillämpa behörigheter på de data som du kopierade till det Data Lake Storage Gen2-aktiverade kontot:

./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>
  • Ersätt platshållaren <storage-account-name> med namnet på ditt lagringskonto.

  • <container-name> Ersätt platshållaren med namnet på containern.

  • <application-id> Ersätt platshållarna och <client-secret> med program-ID:t och klienthemligheten som du samlade in när du skapade tjänstens huvudnamn.

Bilaga: Dela upp data mellan flera Data Box-enheter

Innan du flyttar dina data till en Data Box-enhet måste du ladda ned några hjälpskript, se till att dina data är ordnade så att de får plats på en Data Box-enhet och exkludera onödiga filer.

Ladda ned hjälpskript och konfigurera gränsnoden för att köra dem

  1. Kör det här kommandot från gränsen eller huvudnoden i ditt lokala Hadoop-kluster:

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

    Det här kommandot klonar GitHub-lagringsplatsen som innehåller hjälpskripten.

  2. Kontrollera att jq-paketet är installerat på den lokala datorn.

    
    sudo apt-get install jq
    
  3. Installera python-paketet Begäranden .

    
    pip install requests
    
  4. Ange körningsbehörigheter för de skript som krävs.

    
    chmod +x *.py *.sh
    
    

Se till att dina data är ordnade så att de får plats på en Data Box-enhet

Om storleken på dina data överskrider storleken på en enda Data Box-enhet kan du dela upp filer i grupper som du kan lagra på flera Data Box-enheter.

Om dina data inte överskrider storleken på en singe Data Box-enhet kan du gå vidare till nästa avsnitt.

  1. Med utökade behörigheter kör du skriptet generate-file-list som du laddade ned genom att följa riktlinjerna i föregående avsnitt.

    Här är en beskrivning av kommandoparametrarna:

    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. Kopiera de genererade fillistorna till HDFS så att de är tillgängliga för DistCp-jobbet .

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

Exkludera onödiga filer

Du måste undanta vissa kataloger från DisCp-jobbet. Exkludera till exempel kataloger som innehåller tillståndsinformation som håller klustret igång.

I det lokala Hadoop-klustret där du planerar att initiera DistCp-jobbet skapar du en fil som anger listan över kataloger som du vill exkludera.

Här är ett exempel:

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

Nästa steg

Lär dig hur Data Lake Storage Gen2 fungerar med HDInsight-kluster. Mer information finns i Använda Azure Data Lake Storage Gen2 med Azure HDInsight-kluster.