Aracılığıyla paylaş


HDInsight 3.6'dan HDInsight 4.0'a Hive iş yüklerinin geçişine yönelik sorun giderme kılavuzu

Bu makale, müşterilerin Hive iş yüklerini HDInsight 3.6'dan HDInsight 4.0'a geçirirken karşılaştığı en yaygın sorunlardan bazılarının yanıtlarını sağlar.

Çalışırken gecikme süresini azaltma DESCRIBE TABLE_NAME

Geçici çözüm:

  • Meta veri deposundan tek bir toplu işlemle alınabilecek en fazla nesne (tablo/bölüm) sayısını artırın. Tatmin edici gecikme süresi düzeylerine ulaşılana kadar bunu büyük bir sayıya ayarlayın (varsayılan değer 300'dür). Sayı ne kadar yüksek olursa Hive meta veri deposu sunucusuna o kadar az gidiş dönüş gerekir, ancak istemci tarafında daha yüksek bellek gereksinimine de neden olabilir.

    hive.metastore.batch.retrieve.max=2000

  • Hive'ı ve tüm eski hizmetleri yeniden başlatma

Tablo için skip.header.line.count ve skip.footer.line.count ayarlandıysa Gzipped metin dosyası sorgulanamıyor

Sorun Interactive Query 4.0'da düzeltildi ancak Yine de Interactive Query 3.1.0'da düzeltilmedi

Geçici çözüm:

  • ve kullanmadan "skip.header.line.count"="1" tablo oluşturun, "skip.footer.line.count"="1"ardından sorgudaki üst bilgi/alt bilgi satırını dışlayan özgün tablodan görünüm oluşturun.

Unicode karakterler kullanılamıyor

Geçici çözüm:

  1. Kümenizin hive meta veri deposu veritabanına Bağlan.

  2. Aşağıdaki komutu kullanarak ve TABLE_PARAMS tablolarının TBLS yedeğini alın:

        select * into tbls_bak from tbls;
        select * into table_params_bak from table_params;
    
  3. Etkilenen sütun türlerini el ile olarak nvarchar(max)değiştirin.

        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;
    

Select olarak tablo oluştur (CTAS), aynı UUID ile yeni bir tablo oluşturur

Hive 3.1 (HDInsight 4.0), benzersiz UUID'ler oluşturmak için yerleşik bir UDF sunar. Hive UUID() yöntemi, CTAS ile bile benzersiz kimlikler oluşturur. Bunu aşağıdaki gibi kullanabilirsiniz.

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

Hive işi çıkış biçimi HDInsight 3.6'dan farklıdır

Bunun nedeni HDInsight 3.6 ile HDInsight 4.0 arasındaki WebHCat(Templeton) farkıdır.

  • Hive REST API - ekleme arg=--showHeader=false -d arg=--outputformat=tsv2 -d

  • .NET SDK - öğesinin birleştirmelerini başlatma 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
                };
    

Hive iç tablo oluşturma gecikme süresini azaltma

  1. Gelişmiş hive-site ve Advanced hivemetastore-site kaynaklarından değerini org.apache.hive.hcatalog.listener.DbNotificationListener hive.metastore.transactional.event.listenerssilin.

  2. Bir değeri varsa hive.metastore.event.listeners kaldırın.

  3. DbNotificationListener yalnızca REPL komutlarını kullanıyorsanız gereklidir ve kullanılmıyorsa kaldırmanız güvenlidir.

    Reduce internal table latency in HDInsight 4.0.

Hive varsayılan tablo konumunu değiştirme

Bu davranış değişikliği, HDInsight 4.0 (Hive 3.1) üzerinde tasarım gereğidir. Bu değişikliğin en önemli nedeni, dosya izni denetimi amaçlarıdır.

Özel bir konum altında dış tablolar oluşturmak için create table deyiminde konumu belirtin.

HDInsight 4.0'da ACID'i devre dışı bırakma

HDInsight 4.0'da ACID'i etkinleştirmenizi öneririz. Hive'da hem işlevsel hem de performans açısından son geliştirmelerin çoğu yalnızca ACID tablolarında kullanılabilir hale getirilmiştir.

HDInsight 4.0'da ACID'i devre dışı bırakma adımları:

  1. Ambari'de aşağıdaki hive yapılandırmalarını değiştirin:

    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;
    

Not

hive.strict.managed.tables true <Default değerine> ayarlanırsa, Yönetilen ve işlem dışı tablo oluşturma işlemi aşağıdaki hatayla başarısız olur:

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. Hive hizmetini yeniden başlatın.

Önemli

Microsoft, HDInsight 3.6 ve HDInsight 4.0 Hive tarafından yönetilen tablolarla aynı verileri/depolamayı paylaşmamanızı önerir. Desteklenmeyen bir senaryodur.

  • Normalde, HDInsight 4.0 kümesinde herhangi bir Hive tablosu oluşturmadan önce bile yukarıdaki yapılandırmalar ayarlanmalıdır. Yönetilen tablolar oluşturulduktan sonra ACID'i devre dışı bırakmamalıyız. Veri kaybına veya tutarsız sonuçlara neden olabilir. Bu nedenle, yeni bir küme oluşturduğunuzda ve daha sonra değiştirmediğinizde bunu bir kez ayarlamanız önerilir.

  • Tablo oluşturduktan sonra ACID'in devre dışı bırakılması risklidir, ancak bunu yapmak istemeniz durumunda olası veri kaybını veya tutarsızlığı önlemek için aşağıdaki adımları izleyin:

    1. Aynı şemaya sahip bir dış tablo oluşturun ve CTAS komutunu create external table e_t1 select * from m_t1kullanarak özgün yönetilen tablodaki verileri kopyalayın.
    2. kullanarak drop table m_t1yönetilen tabloyu bırakın.
    3. Önerilen yapılandırmaları kullanarak ACID'i devre dışı bırakın.
    4. CTAS komutunu create table m_t1 select * from e_t1kullanarak yeniden m_t1 oluşturun ve dış tablodan veri kopyalayın.
    5. kullanarak drop table e_t1dış tabloyu bırakın.

ACID'i devre dışı bırakmadan önce tüm yönetilen tabloların dış tablolara dönüştürüldüğü ve bırakıldığından emin olun. Ayrıca, herhangi bir tutarsızlığı önlemek için her adımdan sonra şemayı ve verileri karşılaştırın.

755 izniyle Hive dış tablosu oluşturma

Bu sorun aşağıdaki iki seçenekle çözülebilir:

  1. Hive kullanıcısının dizine yazmasına izin vermek için klasör iznini el ile 757 veya 777 olarak ayarlayın.

  2. "Hive Yetkilendirme Yöneticisi" olarak org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnlydeğiştirin.

Hive meta veri deposu HDInsight 4.0'a eklenmediğinden MetaStoreAuthzAPIAuthorizerEmbedOnly güvenlik denetimlerini etkin bir şekilde devre dışı bırakır. Ancak diğer olası sorunları da beraberinde getirebilir. Bu seçeneği kullanırken dikkatli olun.

HDInsight 4.0'a yükselttikten sonra Hive işinde izin hataları

  • HDInsight 4.0'da Hive bileşenlerine sahip tüm küme şekilleri yeni bir yetkilendirme sağlayıcısıyla yapılandırılır:

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

  • HDFS dosya izinleri, erişilen dosya için hive kullanıcısına atanmalıdır. Hata iletisi, sorunu çözmek için gereken ayrıntıları sağlar.

  • HDInsight 3.6 Hive kümelerinde kullanılan sağlayıcıya MetaStoreAuthzAPIAuthorizerEmbedOnly da geçiş yapabilirsiniz.

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

    Set authorization to MetaStoreAuthzAPIAuthorizerEmbedOnly.

OpenCSVSerde ile tablo sorgulanamıyor

Biçim tablosundan csv veri okuma aşağıdaki gibi özel durumlara neden olabilir:

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

Geçici çözüm:

  • Ambari kullanıcı arabirimi aracılığıyla yapılandırma metastore.storage.schema.reader.implorg.apache.hadoop.hive.metastore.SerDeStorageSchemaReader=Custom hive-site ekleme

  • Tüm eski hive hizmetlerini yeniden başlatın

Sonraki adımlar

Sorununuzu görmediyseniz veya sorununuzu çözemiyorsanız daha fazla destek için aşağıdaki kanallardan birini ziyaret edin:

  • Azure Topluluk Desteği aracılığıyla Azure uzmanlarından yanıt alın.

  • @AzureSupport ile Bağlan - müşteri deneyimini geliştirmeye yönelik resmi Microsoft Azure hesabı. Azure topluluğunun doğru kaynaklara Bağlan: yanıtlar, destek ve uzmanlar.

  • Daha fazla yardıma ihtiyacınız varsa Azure portalından bir destek isteği gönderebilirsiniz. Menü çubuğundan Destek'i seçin veya Yardım + destek hub'ını açın. Daha ayrıntılı bilgi için bkz. Azure desteği isteği oluşturma. Abonelik Yönetimi’ne ve faturalandırma desteğine erişim Microsoft Azure aboneliğinize dahildir, Teknik Destek ise herhangi bir Azure Destek Planı üzerinden sağlanır.