Dela via


Migrera standarddatabasen för Hive-metaarkiv till en extern metaarkivdatabas

Den här artikeln visar hur du migrerar metadata från en standardmetaarkivdatabas för Hive till en extern SQL Database i HDInsight.

Varför migrera till en extern metaarkivdatabas

  • Standarddatabasen för metaarkiv är begränsad till grundläggande SKU och kan inte hantera arbetsbelastningar i produktionsskala.

  • Med en extern metaarkivdatabas kan kunden skala Hive-beräkningsresurser vågrätt genom att lägga till nya HDInsight-kluster som delar samma metaarkivdatabas.

  • För migrering av HDInsight 3.6 till 4.0 är det obligatoriskt att migrera metadata till en extern metaarkivdatabas innan du uppgraderar Hive-schemaversionen. Se Migrera arbetsbelastningar från HDInsight 3.6 till HDInsight 4.0.

Eftersom standardmetalagringsdatabasen har begränsad beräkningskapacitet rekommenderar vi låg användning från andra jobb i klustret vid migrering av metadata.

Käll- och mål-DATABASER måste använda samma HDInsight-version och samma lagringskonton. Om du uppgraderar HDInsight-versioner från 3.6 till 4.0 slutför du först stegen i den här artikeln. Följ sedan de officiella uppgraderingsstegen här.

Förutsättningar

Om du använder Azure Data Lake Storage Gen1 är Hive-tabellplatser sannolikt beroende av klustrets HDFS-konfigurationer för Azure Data Lake Storage Gen1. Kör följande skriptåtgärd för att göra dessa platser portabla för andra kluster. Se Skriptåtgärd för ett kluster som körs.

Åtgärden liknar att ersätta symlinks med deras fullständiga sökvägar.

Egenskap Värde
Bash-skript-URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Nodtyper Head
Parametrar ""

Migrera med exportera/importera med sqlpackage

Ett HDInsight-kluster som skapats först efter 2020-10-15 stöder SQL Export/Import för Hive-standardmetaarkivdatabasen med hjälp sqlpackageav .

  1. Installera sqlpackage i klustret.

  2. Exportera standardmetaarkivdatabasen till BACPAC-filen genom att köra följande kommando.

    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. Spara BACPAC-filen. Nedan visas ett alternativ.

    hdfs dfs -mkdir -p /bacpacs
    hdfs dfs -put $TARGET_FILE /bacpacs/
    
  4. Importera BACPAC-filen till en ny databas med steg som anges här.

  5. Den nya databasen är redo att konfigureras som extern metaarkivdatabas i ett nytt HDInsight-kluster.

Migrera med Hive-skript

Kluster som skapats före 2020-10-15 stöder inte export/import av standardmetaarkivdatabasen.

För sådana kluster följer du guiden Kopiera Hive-tabeller mellan lagringskonton med hjälp av ett andra kluster med en extern Hive-metaarkivdatabas. Det andra klustret kan använda samma lagringskonto men måste använda ett nytt standardfilsystem.

Alternativ för "ytlig" kopia

Lagringsförbrukningen skulle fördubblas när tabellerna är "djupa" och kopieras med hjälp av ovanstående guide. Du måste rensa data i källlagringscontainern manuellt. Vi kan i stället "ytliga" kopiera tabellerna om de inte är transaktionsbaserade. Alla Hive-tabeller i HDInsight 3.6 är icke-transaktionella som standard, men endast externa tabeller är icke-transaktionella i HDInsight 4.0. Transaktionstabeller måste kopieras djupt. Följ dessa steg för att grunda kopiera icke-transaktionella tabeller:

  1. Kör skript hive-ddls.sh på källklustrets primära huvudnod för att generera DDL för varje Hive-tabell.
  2. DDL skrivs till ett lokalt Hive-skript med namnet /tmp/hdi_hive_ddls.hql. Kör detta på målklustret som använder en extern Hive-metaarkivdatabas.

Kontrollera att alla Hive-tabeller har importerats

Följande kommando använder en SQL-fråga i metaarkivdatabasen för att skriva ut alla Hive-tabeller och deras dataplatser. Jämför utdata mellan nya och gamla kluster för att kontrollera att inga tabeller saknas i den nya metaarkivdatabasen.

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

Ytterligare läsning