Dela via


Felsökningsguide för migrering av Hive-arbetsbelastningar från HDInsight 3.6 till HDInsight 4.0

Den här artikeln innehåller svar på några av de vanligaste problemen som kunder stöter på när de migrerar Hive-arbetsbelastningar från HDInsight 3.6 till HDInsight 4.0.

Minska svarstiden när du kör DESCRIBE TABLE_NAME

Lösning:

  • Öka det maximala antalet objekt (tabeller/partitioner) som kan hämtas från metaarkivet i en batch. Ange ett stort tal (standardvärdet är 300) tills tillfredsställande svarstidsnivåer har nåtts. Ju högre antal, desto färre tur och retur-resor behövs till Hive-metaarkivservern, men det kan också orsaka högre minnesbehov på klientsidan.

    hive.metastore.batch.retrieve.max=2000

  • Starta om Hive och alla inaktuella tjänster

Det går inte att fråga Gzipped-textfilen om skip.header.line.count och skip.footer.line.count har angetts för tabellen

Problemet har åtgärdats i Interaktiv fråga 4.0 men fortfarande inte i Interaktiv fråga 3.1.0

Lösning:

  • Skapa tabellen utan att använda "skip.header.line.count"="1" och "skip.footer.line.count"="1", och skapa sedan vyn från den ursprungliga tabellen som exkluderar raden sidhuvud/sidfot i frågan.

Det går inte att använda Unicode-tecken

Lösning:

  1. Anslut till hive-metaarkivdatabasen för klustret.

  2. Gör säkerhetskopieringen av TBLS tabellerna och TABLE_PARAMS med följande kommando:

        select * into tbls_bak from tbls;
        select * into table_params_bak from table_params;
    
  3. Ändra de berörda kolumntyperna manuellt till nvarchar(max).

        alter table TABLE_PARAMS alter column PARAM_VALUE nvarchar(max);
        alter table TBLS alter column VIEW_EXPANDED_TEXT nvarchar(max) null;    
        alter table TBLS alter column VIEW_ORIGINAL_TEXT nvarchar(max) null;
    

Skapa tabell som select (CTAS) skapar en ny tabell med samma UUID

Hive 3.1 (HDInsight 4.0) erbjuder en inbyggd UDF för att generera unika UUID:er. Hive UUID()-metoden genererar unika ID:er även med CTAS. Du kan använda den på följande sätt.

create table rhive as
select uuid() as UUID
from uuid_test

Utdataformatet för Hive-jobb skiljer sig från HDInsight 3.6

Det orsakas av skillnaden mellan WebHCat (Templeton) mellan HDInsight 3.6 och HDInsight 4.0.

  • Hive REST API – lägg till arg=--showHeader=false -d arg=--outputformat=tsv2 -d

  • .NET SDK – initiera args of HiveJobSubmissionParameters

    List<string> args = new List<string> { { "--showHeader=false" }, { "--outputformat=tsv2" } };
                var parameters = new HiveJobSubmissionParameters
                {
                    Query = "SELECT clientid,market from hivesampletable LIMIT 10",
                    Defines = defines,
                    Arguments = args
                };
    

Minska svarstiden för att skapa interna Hive-tabeller

  1. Från Advanced hive-site och Advanced hivemetastore-site tar du bort värdet org.apache.hive.hcatalog.listener.DbNotificationListener för hive.metastore.transactional.event.listeners.

  2. Om hive.metastore.event.listeners har ett värde tar du bort det.

  3. DbNotificationListener behövs bara om du använder REPL-kommandon och om inte är det säkert att ta bort det.

    Reduce internal table latency in HDInsight 4.0.

Ändra Standardtabellplats för Hive

Den här beteendeändringen är avsiktlig på HDInsight 4.0 (Hive 3.1). Den främsta orsaken till den här ändringen är i filbehörighetskontrollsyfte.

Om du vill skapa externa tabeller under en anpassad plats anger du platsen i instruktionen skapa tabell.

Inaktivera ACID i HDInsight 4.0

Vi rekommenderar att du aktiverar ACID i HDInsight 4.0. De flesta av de senaste förbättringarna, både funktionella och prestanda, i Hive görs endast tillgängliga för ACID-tabeller.

Steg för att inaktivera ACID på HDInsight 4.0:

  1. Ändra följande hive-konfigurationer i Ambari:

    hive.strict.managed.tables=false
    hive.support.concurrency=false; 
    hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
    hive.enforce.bucketing=false;
    hive.compactor.initiator.on=false;
    hive.compactor.worker.threads=0;
    hive.create.as.insert.only=false;
    metastore.create.as.acid=false;
    

Kommentar

Om hive.strict.managed.tables är inställt på true <Default-värde> misslyckas tabellen Skapa hanterad och icke-transaktion med följande fel:

java.lang.Exception: java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Table <Table name> failed strict managed table checks due to the following reason: Table is marked as a managed table but is not transactional.
  1. Starta om hive-tjänsten.

Viktigt!

Microsoft rekommenderar att du inte delar samma data/lagring med HDInsight 3.6- och HDInsight 4.0 Hive-hanterade tabeller. Det är ett scenario som inte stöds.

  • Normalt bör ovanstående konfigurationer anges även innan du skapar hive-tabeller i HDInsight 4.0-kluster. Vi bör inte inaktivera ACID när hanterade tabeller har skapats. Det skulle potentiellt orsaka dataförlust eller inkonsekventa resultat. Därför rekommenderar vi att du anger det en gång när du skapar ett nytt kluster och inte ändrar det senare.

  • Det är riskabelt att inaktivera ACID när du har skapat tabeller, men om du vill göra det följer du stegen nedan för att undvika potentiell dataförlust eller inkonsekvens:

    1. Skapa en extern tabell med samma schema och kopiera data från den ursprungliga hanterade tabellen med CTAS-kommandot create external table e_t1 select * from m_t1.
    2. Släpp den hanterade tabellen med .drop table m_t1
    3. Inaktivera ACID med hjälp av de konfigurationer som föreslås.
    4. Skapa m_t1 igen och kopiera data från en extern tabell med CTAS-kommandot create table m_t1 select * from e_t1.
    5. Släpp en extern tabell med .drop table e_t1

Kontrollera att alla hanterade tabeller konverteras till externa tabeller och tas bort innan du inaktiverar ACID. Jämför även schemat och data efter varje steg för att undvika avvikelser.

Skapa en extern Hive-tabell med behörigheten 755

Det här problemet kan lösas med något av följande två alternativ:

  1. Ange mappbehörigheten till 757 eller 777 manuellt så att hive-användare kan skriva till katalogen.

  2. Ändra "Hive Authorization Manager" från org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider till org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly.

MetaStoreAuthzAPIAuthorizerEmbedOnly inaktiverar effektivt säkerhetskontroller eftersom Hive-metaarkivet inte är inbäddat i HDInsight 4.0. Det kan dock medföra andra potentiella problem. Var försiktig när du använder det här alternativet.

Behörighetsfel i Hive-jobbet efter uppgradering till HDInsight 4.0

  • I HDInsight 4.0 konfigureras alla klusterformer med Hive-komponenter med en ny auktoriseringsprovider:

    org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider

  • HDFS-filbehörigheter ska tilldelas hive-användaren för filen som används. Felmeddelandet innehåller den information som behövs för att lösa problemet.

  • Du kan också växla till MetaStoreAuthzAPIAuthorizerEmbedOnly providern som används i HDInsight 3.6 Hive-kluster.

    org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly

    Set authorization to MetaStoreAuthzAPIAuthorizerEmbedOnly.

Det går inte att köra frågor mot tabellen med OpenCSVSerde

Att läsa data från csv formattabellen kan utlösa undantag som:

MetaException(message:java.lang.UnsupportedOperationException: Storage schema reading not supported)

Lösning:

  • Lägga till konfiguration metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader via Custom hive-site Ambari-användargränssnittet

  • Starta om alla inaktuella hive-tjänster

Nästa steg

Om du inte ser problemet eller inte kan lösa problemet går du till någon av följande kanaler för mer support:

  • Få svar från Azure-experter via Azure Community Support.

  • Anslut med @AzureSupport – det officiella Microsoft Azure-kontot för att förbättra kundupplevelsen. Anslut azure-communityn till rätt resurser: svar, support och experter.

  • Om du behöver mer hjälp kan du skicka en supportbegäran från Azure-portalen. Välj Support i menyraden eller öppna hubben Hjälp + support . Mer detaljerad information finns i Skapa en Azure-supportbegäran. Tillgång till support för prenumerationshantering och fakturering ingår i din Microsoft Azure-prenumeration och teknisk support ges via ett supportavtal för Azure.