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.
Ett Azure Storage-konto.
Ett lokalt Hadoop-kluster som innehåller dina källdata.
-
Beställ Data Box eller Data Box Heavy.
Kabelanslut och anslut din Data Box eller Data Box Heavy till ett lokalt nätverk.
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.
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.
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.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.
Ange skalvariabeln
azjars
till platsen förhadoop-azure
jar-filerna ochazure-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
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.
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.
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örahadoop-azure*.jar
och de beroendeazure-storage*.jar
filerna tillgängliga fördistcp
. 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.
Börja med att förbereda för att skicka på din Data Box eller Data Box Heavy.
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.
Stäng av enheten och ta bort kablarna.
Schemalägg en upphämtning med UPS.
Information om Data Box-enheter finns i Skicka din Data Box.
Information om Data Box Heavy-enheter finns i Skicka din Data Box Heavy.
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).
När du utför stegen i avsnittet Tilldela programmet till en roll i artikeln ska du tilldela rollen Storage Blob Data-deltagare till tjänstens huvudnamn.
När du utför stegen i avsnittet Hämta värden för inloggning i artikeln sparar du program-ID och klienthemlighetsvärden i en textfil. Du behöver dem snart.
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
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.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.id_map.json
Öppna filen i en textredigerare.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
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.
Kontrollera att jq-paketet är installerat på den lokala datorn.
sudo apt-get install jq
Installera python-paketet Begäranden .
pip install requests
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.
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'.
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.