Sdílet prostřednictvím


Průvodce odstraňováním potíží s migrací úloh Hive ze služby HDInsight 3.6 do HDInsight 4.0

Tento článek obsahuje odpovědi na některé z nejběžnějších problémů, se kterými se zákazníci setkávají při migraci úloh Hive ze služby HDInsight 3.6 do HDInsight 4.0.

Snížení latence při spuštění DESCRIBE TABLE_NAME

Alternativní řešení:

  • Zvyšte maximální počet objektů (tabulek nebo oddílů), které je možné načíst z metastoru v jedné dávce. Nastavte ho na velké číslo (výchozí hodnota je 300), dokud nedosáhnete uspokojivých úrovní latence. Čím vyšší je číslo, tím méně odezvy je potřeba na server metastoru Hive, ale může to také způsobit vyšší požadavek na paměť na straně klienta.

    hive.metastore.batch.retrieve.max=2000

  • Restartování Hivu a všech zastaralých služeb

Nelze zadat dotaz na textový soubor Gzipped, pokud jsou pro tabulku nastaveny skip.header.line.count a skip.footer.line.count.

Problém je opravený v Interaktivním dotazu 4.0, ale stále ne v Interactive Query 3.1.0

Alternativní řešení:

  • Vytvořte tabulku bez použití "skip.header.line.count"="1" a "skip.footer.line.count"="1"pak vytvořte zobrazení z původní tabulky, která v dotazu vyloučí řádek záhlaví a zápatí.

Nelze použít znaky Unicode

Alternativní řešení:

  1. Připojení do databáze metastoru Hive pro váš cluster.

  2. Pomocí následujícího příkazu proveďte zálohování TBLS tabulek a TABLE_PARAMS tabulek:

        select * into tbls_bak from tbls;
        select * into table_params_bak from table_params;
    
  3. Ručně změňte ovlivněné typy sloupců na 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;
    

Vytvoření tabulky jako select (CTAS) vytvoří novou tabulku se stejným UUID.

Hive 3.1 (HDInsight 4.0) nabízí integrovanou funkci definovanou uživatelem pro generování jedinečných identifikátorů UUID. Metoda Hive UUID() generuje jedinečné ID i s CTAS. Můžete ho použít následujícím způsobem.

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

Formát výstupu úlohy Hive se liší od HDInsight 3.6

Příčinou je rozdíl WebHCat(Templeton) mezi HDInsight 3.6 a HDInsight 4.0.

  • Rozhraní REST API Hive – přidání arg=--showHeader=false -d arg=--outputformat=tsv2 -d

  • .NET SDK – inicializace 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
                };
    

Snížení latence vytváření interních tabulek Hive

  1. Z webu Advanced hive-site a Advanced hivemetastore-site odstraňte hodnotu org.apache.hive.hcatalog.listener.DbNotificationListener pro hive.metastore.transactional.event.listeners.

  2. Pokud hive.metastore.event.listeners má hodnotu, odeberte ji.

  3. DbNotificationListener je potřeba jenom v případě, že používáte příkazy REPL, a pokud ne, je bezpečné ho odebrat.

    Reduce internal table latency in HDInsight 4.0.

Změna výchozího umístění tabulky Hive

Tato změna chování je navržena ve službě HDInsight 4.0 (Hive 3.1). Hlavním důvodem této změny je pro účely řízení oprávnění k souborům.

Pokud chcete vytvořit externí tabulky pod vlastním umístěním, zadejte umístění v příkazu create table.

Zakázání ACID ve službě HDInsight 4.0

Doporučujeme povolit ACID ve službě HDInsight 4.0. Většina nejnovějších vylepšení, funkčního i výkonu, v Hive jsou k dispozici pouze pro tabulky ACID.

Postup zakázání ACID ve službě HDInsight 4.0:

  1. Změňte následující konfigurace Hive v 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;
    

Poznámka:

Pokud je hive.strict.managed.tables nastavena na hodnotu True <Default>, vytváření spravované a neaktuční tabulky selže s následující chybou:

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. Restartujte službu Hive.

Důležité

Microsoft doporučuje sdílet stejná data nebo úložiště s tabulkami spravovanými systémem HDInsight 3.6 a HDInsight 4.0 Hive. Jedná se o nepodporovaný scénář.

  • Za normálních okolností by se výše uvedené konfigurace měly nastavit i před vytvořením tabulek Hive v clusteru HDInsight 4.0. Po vytvoření spravovaných tabulek bychom neměli funkci ACID zakázat. Mohlo by to způsobit ztrátu dat nebo nekonzistentní výsledky. Proto se doporučuje ho nastavit jednou, když vytvoříte nový cluster a později ho nezměníte.

  • Zakázání acid po vytvoření tabulek je rizikové, ale pokud to chcete udělat, postupujte podle následujících kroků, abyste se vyhnuli potenciální ztrátě nebo nekonzistence dat:

    1. Vytvořte externí tabulku se stejným schématem a zkopírujte data z původní spravované tabulky pomocí příkazu create external table e_t1 select * from m_t1CTAS .
    2. Odstraňte spravovanou tabulku pomocí drop table m_t1.
    3. Zakažte ACID pomocí navrhovaných konfigurací.
    4. Vytvořte m_t1 znovu a zkopírujte data z externí tabulky pomocí příkazu create table m_t1 select * from e_t1CTAS .
    5. Zahoďte externí tabulku pomocí drop table e_t1.

Před zakázáním acid se ujistěte, že se všechny spravované tabulky převedou na externí tabulky a zahodí se. Porovnejte také schéma a data po jednotlivých krocích, abyste se vyhnuli nesrovnalostem.

Vytvoření externí tabulky Hive s oprávněním 755

Tento problém můžete vyřešit některou z následujících dvou možností:

  1. Ručně nastavte oprávnění ke složce na 757 nebo 777, aby uživatel Hive mohl zapisovat do adresáře.

  2. Změňte "Správce autorizace Hive" z org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider na org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly.

MetaStoreAuthzAPIAuthorizerEmbedOnly efektivně zakáže kontroly zabezpečení, protože metastore Hive není vložen v HDInsight 4.0. Může ale přinést další potenciální problémy. Při použití této možnosti buďte opatrní.

Chyby oprávnění v úloze Hive po upgradu na HDInsight 4.0

  • Ve službě HDInsight 4.0 jsou všechny obrazce clusteru s komponentami Hive nakonfigurované s novým zprostředkovatelem autorizace:

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

  • Oprávnění k souborům HDFS by měla být přiřazena uživateli Hive pro přístup k souboru. Chybová zpráva obsahuje podrobnosti potřebné k vyřešení problému.

  • Můžete také přepnout na MetaStoreAuthzAPIAuthorizerEmbedOnly poskytovatele používaného v clusterech HDInsight 3.6 Hive.

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

    Set authorization to MetaStoreAuthzAPIAuthorizerEmbedOnly.

Nejde dotazovat tabulku pomocí OpenCSVSerde

Čtení dat z csv tabulky formátu může vyvolat výjimku, například:

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

Alternativní řešení:

  • Přidání konfigurace metastore.storage.schema.reader.impl=org.apache.hadoop.hive.metastore.SerDeStorageSchemaReaderCustom hive-site přes uživatelské rozhraní Ambari

  • Restartování všech zastaralých služeb Hive

Další kroky

Pokud jste problém neviděli nebo nemůžete problém vyřešit, navštivte jeden z následujících kanálů, kde najdete další podporu:

  • Získejte odpovědi od odborníků na Azure prostřednictvím podpory komunity Azure.

  • Připojení s @AzureSupport – oficiálním účtem Microsoft Azure pro zlepšení zkušeností zákazníků. Připojení komunity Azure k správným prostředkům: odpovědi, podpora a odborníci.

  • Pokud potřebujete další pomoc, můžete odeslat žádost o podporu z webu Azure Portal. V řádku nabídek vyberte možnost Podpora nebo otevřete centrum nápovědy a podpory . Podrobnější informace najdete v tématu Vytvoření žádosti o podpora Azure. Součástí předplatného Microsoft Azure je přístup ke správě předplatného a podpora fakturace. Technická podpora se poskytuje prostřednictvím některého z plánů podpory Azure.