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:
Anslut till hive-metaarkivdatabasen för klustret.
Gör säkerhetskopieringen av
TBLS
tabellerna ochTABLE_PARAMS
med följande kommando:select * into tbls_bak from tbls; select * into table_params_bak from table_params;
Ä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
Från Advanced hive-site och Advanced hivemetastore-site tar du bort värdet
org.apache.hive.hcatalog.listener.DbNotificationListener
förhive.metastore.transactional.event.listeners
.Om
hive.metastore.event.listeners
har ett värde tar du bort det.DbNotificationListener behövs bara om du använder REPL-kommandon och om inte är det säkert att ta bort det.
Ä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:
Ä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.
- 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:
- 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
. - Släpp den hanterade tabellen med .
drop table m_t1
- Inaktivera ACID med hjälp av de konfigurationer som föreslås.
- Skapa m_t1 igen och kopiera data från en extern tabell med CTAS-kommandot
create table m_t1 select * from e_t1
. - Släpp en extern tabell med .
drop table e_t1
- Skapa en extern tabell med samma schema och kopiera data från den ursprungliga hanterade tabellen med CTAS-kommandot
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:
Ange mappbehörigheten till 757 eller 777 manuellt så att hive-användare kan skriva till katalogen.
Ändra "Hive Authorization Manager" från
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
tillorg.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
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
viaCustom hive-site
Ambari-användargränssnittetStarta 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.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för