Migrace z místního úložiště HDFS do Azure Storage pomocí Azure Data Boxu

Data můžete migrovat z místního úložiště HDFS vašeho clusteru Hadoop do Služby Azure Storage (blob Storage nebo Data Lake Storage Gen2) pomocí zařízení Data Box. Můžete si vybrat z Data Box Disku, 80 TB Data Boxu nebo 770 TB Data Boxu Heavy.

Tento článek vám pomůže s dokončením těchto úkolů:

  • Příprava na migraci dat
  • Kopírování dat do zařízení Data Box Disk, Data Box nebo Data Box Heavy
  • Odeslání zařízení zpět do Microsoftu
  • Použití přístupových oprávnění pro soubory a adresáře (pouze Data Lake Storage Gen2)

Předpoklady

K dokončení migrace potřebujete tyto věci.

Pokud jste připraveni, začněme.

Kopírování dat do zařízení Data Box

Pokud se vaše data zapadnou do jednoho zařízení Data Box, zkopírujte data do zařízení Data Box.

Pokud velikost dat překročí kapacitu zařízení Data Box, použijte volitelný postup rozdělení dat mezi několik zařízení Data Box a pak tento krok proveďte.

Pokud chcete zkopírovat data z místního úložiště HDFS do zařízení Data Box, nastavíte několik věcí a pak použijete nástroj DistCp .

Pomocí těchto kroků zkopírujte data přes rozhraní REST API úložiště objektů blob nebo objektů do zařízení Data Box. Rozhraní REST API způsobí, že se zařízení zobrazí jako úložiště HDFS do vašeho clusteru.

  1. Než data zkopírujete přes REST, identifikujte zabezpečení a primitiva připojení pro připojení k rozhraní REST v Data Boxu nebo Data Boxu Heavy. Přihlaste se k místnímu webovému uživatelskému rozhraní Data Boxu a přejděte na Připojení a zkopírujte stránku. V účtech úložiště Azure pro vaše zařízení v části Nastavení přístupu vyhledejte a vyberte REST.

  2. V dialogovém okně Přístup k účtu úložiště a nahrání dat zkopírujte koncový bod služby Blob a klíč účtu úložiště. Z koncového bodu služby Blob Service vynecháte https:// koncové lomítko a koncové lomítko.

    V tomto případě je koncový bod: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Hostitelská část identifikátoru URI, kterou používáte, je: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Podívejte se například, jak Připojení rest přes http.

  3. Přidejte koncový bod a IP adresu uzlu Data Box nebo Data Box Heavy do /etc/hosts každého uzlu.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Pokud pro DNS používáte nějaký jiný mechanismus, měli byste se ujistit, že je možné přeložit koncový bod Data Boxu.

  4. Nastavte proměnnou azjars prostředí na umístění hadoop-azure souborů JAR a azure-storage souborů JAR. Tyto soubory najdete v instalačním adresáři Hadoop.

    Chcete-li zjistit, zda tyto soubory existují, použijte následující příkaz: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. <hadoop_install_dir> Zástupný symbol nahraďte cestou k adresáři, do kterého jste nainstalovali Hadoop. Nezapomeňte použít plně kvalifikované cesty.

    Příklady:

    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. Vytvořte kontejner úložiště, který chcete použít pro kopírování dat. Jako součást tohoto příkazu byste také měli zadat cílový adresář. V tuto chvíli by to mohl být fiktivní cílový adresář.

    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> Zástupný symbol nahraďte názvem koncového bodu služby Blob Service.

    • <account_key> Zástupný symbol nahraďte přístupovým klíčem vašeho účtu.

    • <container-name> Zástupný symbol nahraďte názvem kontejneru.

    • <destination_directory> Zástupný symbol nahraďte názvem adresáře, do kterého chcete data zkopírovat.

  6. Spuštěním příkazu list se ujistěte, že se kontejner a adresář vytvořily.

    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> Zástupný symbol nahraďte názvem koncového bodu služby Blob Service.

    • <account_key> Zástupný symbol nahraďte přístupovým klíčem vašeho účtu.

    • <container-name> Zástupný symbol nahraďte názvem kontejneru.

  7. Zkopírujte data ze systému Hadoop HDFS do úložiště objektů blob Data Boxu do kontejneru, který jste vytvořili dříve. Pokud adresář, do kterého kopírujete, nebyl nalezen, příkaz ho automaticky vytvoří.

    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> Zástupný symbol nahraďte názvem koncového bodu služby Blob Service.

    • <account_key> Zástupný symbol nahraďte přístupovým klíčem vašeho účtu.

    • <container-name> Zástupný symbol nahraďte názvem kontejneru.

    • <exlusion_filelist_file> Zástupný symbol nahraďte názvem souboru, který obsahuje seznam vyloučení souborů.

    • <source_directory> Zástupný symbol nahraďte názvem adresáře, který obsahuje data, která chcete zkopírovat.

    • <destination_directory> Zástupný symbol nahraďte názvem adresáře, do kterého chcete data zkopírovat.

    Tato -libjars možnost slouží k zpřístupnění závislých hadoop-azure*.jarazure-storage*.jar souborů distcp. U některých clusterů už k tomu může dojít.

    Následující příklad ukazuje, jak se distcp příkaz používá ke kopírování dat.

     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
    

    Zvýšení rychlosti kopírování:

    • Zkuste změnit počet mapovačů. (Výchozí počet mapovačů je 20. Výše uvedený příklad používá m = 4 mappers.)

    • Zkuste -D fs.azure.concurrentRequestCount.out=<thread_number> to. Nahraďte <thread_number> počtem vláken na mapper. Součin počtu mapovačů a počtu vláken na mapovač nesmí m*<thread_number>překročit 32.

    • Zkuste spustit více distcp paralelně.

    • Mějte na paměti, že velké soubory fungují lépe než malé soubory.

    • Pokud máte soubory větší než 200 GB, doporučujeme změnit velikost bloku na 100 MB s následujícími parametry:

    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
    

Odeslání Data Boxu do Microsoftu

Tímto postupem připravíte a odešlete zařízení Data Box do Microsoftu.

  1. Nejprve se připravte na odeslání data Boxu nebo Data Boxu Heavy.

  2. Po dokončení přípravy zařízení stáhněte soubory kusovníku. Tyto soubory kusovníku nebo manifestu použijete později k ověření dat nahraných do Azure.

  3. Vypněte zařízení a odeberte kabely.

  4. Naplánujte vyzvednutí službou UPS.

  5. Jakmile Microsoft obdrží vaše zařízení, připojí se k síti datového centra a data se nahrají do účtu úložiště, který jste zadali při zadání objednávky zařízení. Ověřte v souborech kusovníku, že se všechna vaše data nahrají do Azure.

Použití přístupových oprávnění pro soubory a adresáře (pouze Data Lake Storage Gen2)

Data už máte v účtu Azure Storage. Teď použijete přístupová oprávnění pro soubory a adresáře.

Poznámka:

Tento krok je potřeba jenom v případě, že jako úložiště dat používáte Azure Data Lake Storage Gen2. Pokud jako úložiště dat používáte jenom účet úložiště objektů blob bez hierarchického oboru názvů, můžete tuto část přeskočit.

Vytvoření instančního objektu pro účet s podporou Azure Data Lake Storage Gen2

Informace o vytvoření instančního objektu najdete v tématu Postupy: Použití portálu k vytvoření aplikace Microsoft Entra a instančního objektu, který má přístup k prostředkům.

Vygenerování seznamu zkopírovaných souborů s jejich oprávněními

Z místního clusteru Hadoop spusťte tento příkaz:


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

Tento příkaz vygeneruje seznam zkopírovaných souborů s jejich oprávněními.

Poznámka:

V závislosti na počtu souborů v HDFS může spuštění tohoto příkazu trvat dlouhou dobu.

Vygenerování seznamu identit a jejich mapování na identity Microsoft Entra

  1. copy-acls.py Stáhněte si skript. Podívejte se na pomocné skripty ke stažení a nastavte hraniční uzel tak, aby je spouštěl v části tohoto článku.

  2. Spuštěním tohoto příkazu vygenerujte seznam jedinečných identit.

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

    Tento skript vygeneruje soubor s názvem id_map.json obsahující identity, které potřebujete namapovat na identity založené na doplňku.

  3. id_map.json Otevřete soubor v textovém editoru.

  4. Pro každý objekt JSON, který se zobrazí v souboru, aktualizujte target atribut hlavního názvu uživatele Microsoft Entra (UPN) nebo ObjectId (OID) s příslušnou mapovanou identitou. Až to budete hotovi, soubor uložte. Tento soubor budete potřebovat v dalším kroku.

Použití oprávnění ke zkopírovaným souborům a použití mapování identit

Spuštěním tohoto příkazu použijte oprávnění k datům, která jste zkopírovali do účtu s podporou Data Lake Storage Gen2:

./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>
  • <storage-account-name> Zástupný symbol nahraďte názvem vašeho účtu úložiště.

  • <container-name> Zástupný symbol nahraďte názvem kontejneru.

  • <application-id> Nahraďte zástupné <client-secret> symboly ID aplikace a tajným kódem klienta, který jste shromáždili při vytváření instančního objektu.

Příloha: Rozdělení dat mezi několik zařízení Data Box

Než data přesunete na zařízení Data Box, musíte si stáhnout některé pomocné skripty, zajistit, aby se vaše data uspořádala tak, aby se vešla do zařízení Data Box, a vyloučit všechny nepotřebné soubory.

Stáhněte si pomocné skripty a nastavte hraniční uzel tak, aby je spouštěl.

  1. Z hraničního nebo hlavního uzlu místního clusteru Hadoop spusťte tento příkaz:

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

    Tento příkaz naklonuje úložiště GitHub, které obsahuje pomocné skripty.

  2. Ujistěte se, že je v místním počítači nainstalovaný balíček jq .

    
    sudo apt-get install jq
    
  3. Nainstalujte balíček Requests python.

    
    pip install requests
    
  4. Nastavte oprávnění ke spuštění požadovaných skriptů.

    
    chmod +x *.py *.sh
    
    

Ujistěte se, že jsou vaše data uspořádaná tak, aby se vešla do zařízení Data Box.

Pokud velikost dat překračuje velikost jednoho zařízení Data Box, můžete soubory rozdělit do skupin, které můžete uložit na několik zařízení Data Box.

Pokud vaše data nepřekračují velikost zařízení Data Box, můžete přejít k další části.

  1. Se zvýšenými oprávněními spusťte generate-file-list skript, který jste stáhli, podle pokynů v předchozí části.

    Tady je popis parametrů příkazu:

    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. Zkopírujte vygenerované seznamy souborů do HDFS, aby byly přístupné pro úlohu DistCp .

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

Vyloučení nepotřebných souborů

Některé adresáře musíte z úlohy DisCp vyloučit. Vylučte například adresáře, které obsahují informace o stavu, které udržují cluster spuštěný.

V místním clusteru Hadoop, kde plánujete zahájit úlohu DistCp, vytvořte soubor, který určuje seznam adresářů, které chcete vyloučit.

Tady je příklad:

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

Další kroky

Zjistěte, jak Data Lake Storage Gen2 funguje s clustery HDInsight. Další informace najdete v tématu Používání služby Azure Data Lake Storage Gen2 s clustery Azure HDInsight.