Migrowanie domyślnej bazy danych magazynu metadanych Hive do zewnętrznej bazy danych magazynu metadanych

W tym artykule pokazano, jak przeprowadzić migrację metadanych z domyślnej bazy danych magazynu metadanych dla programu Hive do zewnętrznego SQL Database w usłudze HDInsight.

Dlaczego warto przeprowadzić migrację do zewnętrznej bazy danych magazynu metadanych

  • Domyślna baza danych magazynu metadanych jest ograniczona do podstawowej jednostki SKU i nie może obsługiwać obciążeń skalowania produkcyjnego.

  • Zewnętrzna baza danych magazynu metadanych umożliwia klientowi skalowanie zasobów obliczeniowych hive w poziomie przez dodanie nowych klastrów usługi HDInsight współużytkowania tej samej bazy danych magazynu metadanych.

  • W przypadku migracji usługi HDInsight 3.6 do 4.0 należy przeprowadzić migrację metadanych do zewnętrznej bazy danych magazynu metadanych przed uaktualnieniem wersji schematu programu Hive. Zobacz migrowanie obciążeń z usługi HDInsight 3.6 do usługi HDInsight 4.0.

Ponieważ domyślna baza danych magazynu metadanych ma ograniczoną pojemność obliczeniową, zalecamy niskie wykorzystanie innych zadań w klastrze podczas migrowania metadanych.

Źródłowe i docelowe bazy danych muszą używać tej samej wersji usługi HDInsight i tych samych kont magazynu. Jeśli uaktualnij wersje usługi HDInsight z wersji 3.6 do 4.0, najpierw wykonaj kroki opisane w tym artykule. Następnie wykonaj oficjalne kroki uaktualniania tutaj.

Wymagania wstępne

W przypadku korzystania z Azure Data Lake Storage Gen1 lokalizacje tabeli Hive prawdopodobnie zależą od konfiguracji systemu plików HDFS klastra dla Azure Data Lake Storage Gen1. Uruchom następującą akcję skryptu, aby te lokalizacje były przenośne do innych klastrów. Zobacz Akcja skryptu uruchomionego klastra.

Akcja jest podobna do zastępowania symlinków ich pełnymi ścieżkami.

Właściwość Wartość
Identyfikator URI skryptu powłoki Bash https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Typy węzłów Head
Parametry ""

Migrowanie za pomocą funkcji Eksportowanie/Importowanie przy użyciu pakietu sqlpackage

Klaster usługi HDInsight utworzony dopiero po 2020-10-15 obsługuje eksport/importowanie sql dla domyślnej bazy danych magazynu metadanych Hive przy użyciu polecenia sqlpackage.

  1. Zainstaluj pakiet sqlpackage w klastrze.

  2. Wyeksportuj domyślną bazę danych magazynu metadanych do pliku BACPAC, wykonując następujące polecenie.

    wget "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive_metastore_tool.py"
    SQLPACKAGE_FILE='/home/sshuser/sqlpackage/sqlpackage'  # replace with sqlpackage location
    TARGET_FILE='hive.bacpac'
    sudo python hive_metastore_tool.py --sqlpackagefile $SQLPACKAGE_FILE --targetfile $TARGET_FILE
    
  3. Zapisz plik BACPAC. Poniżej znajduje się opcja.

    hdfs dfs -mkdir -p /bacpacs
    hdfs dfs -put $TARGET_FILE /bacpacs/
    
  4. Zaimportuj plik BACPAC do nowej bazy danych, wykonując kroki wymienione tutaj.

  5. Nowa baza danych jest gotowa do skonfigurowania jako zewnętrznej bazy danych magazynu metadanych w nowym klastrze usługi HDInsight.

Migrowanie przy użyciu skryptu hive

Klastry utworzone przed 2020-10-15 nie obsługują eksportowania/importowania domyślnej bazy danych magazynu metadanych.

W przypadku takich klastrów postępuj zgodnie z przewodnikiem Kopiowanie tabel Hive między kontami magazynu przy użyciu drugiego klastra z zewnętrzną bazą danych magazynu metadanych Hive. Drugi klaster może używać tego samego konta magazynu, ale musi używać nowego domyślnego systemu plików.

Opcja "płytkiej" kopii

Użycie magazynu podwoiłoby się, gdy tabele są "głębokie" kopiowane przy użyciu powyższego przewodnika. Musisz ręcznie wyczyścić dane w źródłowym kontenerze magazynu. Możemy zamiast tego "płytkie" skopiować tabele, jeśli nie są transakcyjne. Wszystkie tabele hive w usłudze HDInsight 3.6 są domyślnie nie transakcyjne, ale tylko tabele zewnętrzne nie są transakcyjne w usłudze HDInsight 4.0. Tabele transakcyjne muszą być kopiowane głęboko. Wykonaj następujące kroki, aby skopiować tabele inne niż transakcyjne:

  1. Wykonaj skrypt hive-ddls.sh w podstawowym węźle głównym klastra źródłowego, aby wygenerować DDL dla każdej tabeli Hive.
  2. DDL jest zapisywany w lokalnym skryscie Hive o nazwie /tmp/hdi_hive_ddls.hql. Wykonaj to w klastrze docelowym, który używa zewnętrznej bazy danych magazynu metadanych Hive.

Sprawdź, czy wszystkie tabele Hive są importowane

Poniższe polecenie używa zapytania SQL w bazie danych magazynu metadanych do drukowania wszystkich tabel Hive i ich lokalizacji danych. Porównaj dane wyjściowe między nowymi i starymi klastrami, aby sprawdzić, czy w nowej bazie danych magazynu metadanych nie brakuje żadnych tabel.

SCRIPT_FNAME='hive_metastore_tool.py'
SCRIPT="/tmp/$SCRIPT_FNAME"
wget -O "$SCRIPT" "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/$SCRIPT_FNAME"
OUTPUT_FILE='/tmp/hivetables.csv'
QUERY="SELECT DBS.NAME, TBLS.TBL_NAME, SDS.LOCATION FROM SDS, TBLS, DBS WHERE TBLS.SD_ID = SDS.SD_ID AND TBLS.DB_ID = DBS.DB_ID ORDER BY DBS.NAME, TBLS.TBL_NAME ASC;"
sudo python "$SCRIPT" --query "$QUERY" > $OUTPUT_FILE

Dodatkowe informacje