Udostępnij za pomocą


Migrowanie z lokalnego magazynu systemu plików HDFS do usługi Azure Storage przy użyciu usługi Azure Data Box

Dane można migrować z lokalnego magazynu systemu plików HDFS klastra Hadoop do usługi Azure Storage (magazynu obiektów blob lub usługi Data Lake Storage) przy użyciu urządzenia Data Box. Możesz wybrać z urządzeń: Data Box Disk, Data Box o pojemności 80, 120 lub 525 TiB albo Data Box Heavy o pojemności 770 TiB.

Ten artykuł ułatwia wykonywanie następujących zadań:

  • Przygotowywanie do migracji danych
  • Skopiuj dane do urządzenia Data Box Disk, Data Box lub Data Box Heavy
  • Wysyłanie urządzenia z powrotem do firmy Microsoft
  • Stosowanie uprawnień dostępu do plików i katalogów (tylko usługa Data Lake Storage)

Wymagania wstępne

Te elementy są potrzebne do ukończenia migracji.

Jeśli wszystko będzie gotowe, zacznijmy.

Kopiowanie danych na urządzenie Data Box

Jeśli dane pasują do pojedynczego urządzenia Data Box, skopiuj dane na urządzenie Data Box.

Jeśli rozmiar danych przekracza pojemność urządzenia Data Box, użyj opcjonalnej procedury, aby podzielić dane na wiele urządzeń Data Box, a następnie wykonaj ten krok.

Aby skopiować dane z lokalnego magazynu systemu plików HDFS do urządzenia Data Box, należy skonfigurować kilka rzeczy, a następnie użyć narzędzia DistCp .

Wykonaj następujące kroki, aby skopiować dane za pośrednictwem interfejsów API REST usługi Blob/Object Storage na urządzenie Data Box. Interfejs API REST sprawia, że urządzenie jest wyświetlane jako magazyn systemu plików HDFS w klastrze.

  1. Przed skopiowaniem danych za pośrednictwem interfejsu REST zidentyfikuj elementy pierwotne zabezpieczeń i połączeń w celu nawiązania połączenia z interfejsem REST na urządzeniu Data Box lub Data Box Heavy. Zaloguj się do lokalnego internetowego interfejsu użytkownika urządzenia Data Box i przejdź do strony Łączenie i kopiowanie . W przypadku kont magazynowych Azure dla urządzenia, w obszarze Ustawienia dostępu znajdź i wybierz opcję REST.

    Strona

  2. W oknie dialogowym Uzyskiwanie dostępu do konta magazynu i przekazywanie danych skopiuj punkt końcowy usługi Blob i klucz dostępu do konta magazynu. Z punktu końcowego usługi blob pomiń https:// i końcowy ukośnik.

    W takim przypadku punkt końcowy to: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Część identyfikatora URI, której używasz, dotycząca hosta, to: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Aby zapoznać się z przykładem, zobacz, jak nawiązać połączenie z interfejsem REST za pośrednictwem protokołu HTTP.

    Okno dialogowe

  3. Dodaj punkt końcowy oraz adres IP urządzenia Data Box lub Data Box Heavy do /etc/hosts na każdym węźle.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    Jeśli używasz innego mechanizmu dla systemu DNS, upewnij się, że punkt końcowy urządzenia Data Box można rozpoznać.

  4. Ustaw zmienną powłoki azjars na lokalizację plików jar hadoop-azure i azure-storage. Te pliki można znaleźć w katalogu instalacyjnym usługi Hadoop.

    Aby ustalić, czy te pliki istnieją, użyj następującego polecenia: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. <hadoop_install_dir> Zastąp symbol zastępczy ścieżką do katalogu, w którym zainstalowano usługę Hadoop. Pamiętaj, aby używać w pełni kwalifikowanych ścieżek.

    Przykłady:

    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. Utwórz kontener magazynu, którego chcesz użyć do kopiowania danych. Należy również określić katalog docelowy w ramach tego polecenia. W tym momencie może to być fikcyjny katalog docelowy.

    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>
    
    • Zastąp symbol zastępczy <blob_service_endpoint> nazwą punktu końcowego usługi obiektów blob.

    • <account_key> Zastąp symbol zastępczy kluczem dostępu twojego konta.

    • Zastąp element zastępczy <container-name> nazwą kontenera.

    • <destination_directory> Zastąp symbol zastępczy nazwą katalogu, do którego chcesz skopiować dane.

  6. Uruchom polecenie listy, aby upewnić się, że kontener i katalog zostały utworzone.

    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>/
    
    • Zastąp symbol zastępczy <blob_service_endpoint> nazwą punktu końcowego usługi obiektów blob.

    • <account_key> Zastąp symbol zastępczy kluczem dostępu twojego konta.

    • Zastąp element zastępczy <container-name> nazwą kontenera.

  7. Skopiuj dane z systemu plików HDFS usługi Hadoop do usługi Data Box Blob Storage do utworzonego wcześniej kontenera. Jeśli katalog, do którego kopiujesz, nie zostanie znaleziony, polecenie automatycznie go utworzy.

    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>
    
    • Zastąp symbol zastępczy <blob_service_endpoint> nazwą punktu końcowego usługi obiektów blob.

    • <account_key> Zastąp symbol zastępczy kluczem dostępu twojego konta.

    • Zastąp element zastępczy <container-name> nazwą kontenera.

    • <exclusion_filelist_file> Zastąp symbol zastępczy nazwą pliku, który zawiera listę wykluczeń plików.

    • <source_directory> Zastąp symbol zastępczy nazwą katalogu zawierającego dane, które chcesz skopiować.

    • <destination_directory> Zastąp symbol zastępczy nazwą katalogu, do którego chcesz skopiować dane.

    Opcja -libjars służy do udostępniania plików hadoop-azure*.jar i zależnych plików azure-storage*.jar dla distcp. Może to już wystąpić w przypadku niektórych klastrów.

    W poniższym przykładzie pokazano, jak polecenie distcp jest używane do kopiowania danych.

     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
    

    Aby zwiększyć szybkość kopiowania:

    • Spróbuj zmienić liczbę maperów. (Domyślna liczba maperów to 20. W powyższym przykładzie użyto m = 4 maperów).

    • Spróbuj -D fs.azure.concurrentRequestCount.out=<thread_number> . Zastąp <thread_number> liczbą wątków na maper. Produkt liczby maperów i liczby wątków na maper, m*<thread_number> nie powinien przekraczać 32.

    • Spróbuj uruchomić wiele distcp równolegle.

    • Pamiętaj, że duże pliki działają lepiej niż małe pliki.

    • Jeśli masz pliki większe niż 200 GB, zalecamy zmianę rozmiaru bloku na 100 MB przy użyciu następujących parametrów:

    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
    

Wysyłanie urządzenia Data Box do firmy Microsoft

Wykonaj następujące kroki, aby przygotować i wysłać urządzenie Data Box do firmy Microsoft.

  1. Najpierw przygotuj urządzenie Data Box lub Data Box Heavy do wysyłki.

  2. Po zakończeniu przygotowywania urządzenia pobierz pliki BOM. Użyjesz tych plików BOM lub manifestu później, aby zweryfikować dane przekazane na platformę Azure.

  3. Wyłącz urządzenie i odłącz kable.

  4. Zaplanuj odbiór przez firmę UPS.

  5. Po otrzymaniu przez firmę Microsoft urządzenia, zostanie ono podłączone do sieci centrum danych, a dane zostaną przesłane do konta przechowywania danych, które zostało określone podczas składania zamówienia na urządzenie. Porównaj z plikami BOM, aby upewnić się, że wszystkie Twoje dane zostały przesłane na platformę Azure.

Stosowanie uprawnień dostępu do plików i katalogów (tylko usługa Data Lake Storage)

Masz już dane na koncie usługi Azure Storage. Teraz zastosujesz uprawnienia dostępu do plików i katalogów.

Uwaga

Ten krok jest wymagany tylko wtedy, gdy używasz usługi Azure Data Lake Storage jako magazynu danych. Jeśli używasz tylko konta przechowywania obiektów blob bez hierarchicznej przestrzeni nazw jako magazynu danych, możesz pominąć tę sekcję.

Utwórz jednostkę usługi dla konta z włączoną usługą Azure Data Lake Storage

Aby utworzyć jednostkę usługi, zobacz Jak: Użyć portalu do utworzenia aplikacji Microsoft Entra i jednostki usługi, które mogą uzyskiwać dostęp do zasobów.

  • Wykonując kroki opisane w sekcji Przypisywanie aplikacji do roli tego artykułu, upewnij się, że przypisano rolę Współautor danych obiektów Blob w magazynie jednostce usługowej.

  • Podczas wykonywania kroków w sekcji Uzyskiwanie wartości logowania artykułu zapisz identyfikator aplikacji i tajne wartości klienta w pliku tekstowym. Potrzebujesz tych wkrótce.

Generowanie listy skopiowanych plików z uprawnieniami

Z lokalnego klastra Hadoop uruchom następujące polecenie:


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

To polecenie generuje listę skopiowanych plików z ich uprawnieniami.

Uwaga

W zależności od liczby plików w systemie plików HDFS uruchomienie tego polecenia może zająć dużo czasu.

Wygeneruj listę tożsamości i mapuj je na tożsamości Microsoft Entra

  1. copy-acls.py Pobierz skrypt. Zobacz sekcję Pobieranie skryptów pomocniczych i konfigurowanie węzła brzegowego do ich uruchomienia w tym artykule.

  2. Uruchom to polecenie, aby wygenerować listę unikatowych tożsamości.

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

    Ten skrypt generuje plik o nazwie id_map.json, który zawiera tożsamości do zmapowania na tożsamości bazujące na Active Directory.

  3. Otwórz plik id_map.json w edytorze tekstów.

  4. Dla każdego obiektu JSON wyświetlanego w pliku, zaktualizuj atrybut target głównej nazwy użytkownika (UPN) lub ObjectId (OID) w Microsoft Entra przy użyciu odpowiedniej zamapowanej tożsamości. Po zakończeniu zapisz plik. Ten plik będzie potrzebny w następnym kroku.

Stosowanie uprawnień do skopiowanych plików i stosowanie mapowań tożsamości

Uruchom to polecenie, aby zastosować uprawnienia do danych skopiowanych na konto z włączoną usługą Data Lake Storage:

./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>
  • Zastąp symbol zastępczy <storage-account-name> nazwą konta magazynowego.

  • Zastąp element zastępczy <container-name> nazwą kontenera.

  • Zastąp symbole zastępcze <application-id> i <client-secret> identyfikatorem aplikacji i kluczem tajnym klienta, które zebrano podczas tworzenia jednostki usługi.

Dodatek: Dzielenie danych na wiele urządzeń Data Box

Przed przeniesieniem danych na urządzenie Data Box należy pobrać skrypty pomocnika, upewnić się, że dane są zorganizowane tak, aby zmieściły się na urządzeniu Data Box i wykluczyć niepotrzebne pliki.

Pobierz skrypty pomocnicze i skonfiguruj węzeł brzegowy, aby je uruchomić

  1. Z krawędzi lub węzła głównego lokalnego klastra Hadoop uruchom następujące polecenie:

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

    To polecenie klonuje repozytorium GitHub zawierające skrypty pomocnika.

  2. Upewnij się, że pakiet jq jest zainstalowany na komputerze lokalnym.

    
    sudo apt-get install jq
    
  3. Zainstaluj pakiet Python Requests.

    
    pip install requests
    
  4. Ustaw uprawnienia wykonywania dla wymaganych skryptów.

    
    chmod +x *.py *.sh
    
    

Upewnij się, że dane są zorganizowane tak, aby zmieściły się na urządzeniu Data Box

Jeśli rozmiar danych przekracza rozmiar pojedynczego urządzenia Data Box, możesz podzielić pliki na grupy, które można przechowywać na wielu urządzeniach Data Box.

Jeśli dane nie przekraczają rozmiaru pojedynczego urządzenia Data Box, możesz przejść do następnej sekcji.

  1. W przypadku podwyższonych uprawnień uruchom pobrany skrypt generate-file-list, postępując zgodnie ze wskazówkami w poprzedniej sekcji.

    Oto opis parametrów polecenia:

    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. Skopiuj wygenerowane listy plików do systemu plików HDFS, aby były dostępne dla zadania DistCp .

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

Wykluczanie niepotrzebnych plików

Należy wykluczyć niektóre katalogi z zadania narzędzia DisCp. Na przykład wyklucz katalogi zawierające informacje o stanie, które utrzymują działanie klastra.

W lokalnym klastrze Hadoop, w którym planujesz zainicjować zadanie DistCp, utwórz plik określający listę katalogów, które chcesz wykluczyć.

Oto przykład:

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

Następne kroki

Dowiedz się, jak usługa Data Lake Storage współpracuje z klastrami usługi HDInsight. Aby uzyskać więcej informacji, zobacz Use Azure Data Lake Storage with Azure HDInsight clusters (Używanie usługi Azure Data Lake Storage z klastrami usługi Azure HDInsight).