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:
Kümeniz için hive meta veri deposu veritabanına bağlanın.
Aşağıdaki komutu kullanarak ve
TABLE_PARAMS
tablolarınınTBLS
yedeğini alın:select * into tbls_bak from tbls; select * into table_params_bak from table_params;
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
Gelişmiş hive-site ve Advanced hivemetastore-site kaynaklarından değerini
org.apache.hive.hcatalog.listener.DbNotificationListener
hive.metastore.transactional.event.listeners
silin.Bir değeri varsa
hive.metastore.event.listeners
kaldırın.DbNotificationListener yalnızca REPL komutlarını kullanıyorsanız gereklidir ve kullanılmıyorsa kaldırmanız güvenlidir.
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ı:
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.
- 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:
- Aynı şemaya sahip bir dış tablo oluşturun ve CTAS komutunu
create external table e_t1 select * from m_t1
kullanarak özgün yönetilen tablodaki verileri kopyalayın. - kullanarak
drop table m_t1
yönetilen tabloyu bırakın. - Önerilen yapılandırmaları kullanarak ACID'i devre dışı bırakın.
- CTAS komutunu
create table m_t1 select * from e_t1
kullanarak yeniden m_t1 oluşturun ve dış tablodan veri kopyalayın. - kullanarak
drop table e_t1
dış tabloyu bırakın.
- Aynı şemaya sahip bir dış tablo oluşturun ve CTAS komutunu
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:
Hive kullanıcısının dizine yazmasına izin vermek için klasör iznini el ile 757 veya 777 olarak ayarlayın.
"Hive Yetkilendirme Yöneticisi" olarak
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly
değ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
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.impl
org.apache.hadoop.hive.metastore.SerDeStorageSchemaReader
=Custom hive-site
eklemeTü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.
Müşteri deneyimini geliştirmek için resmi Microsoft Azure hesabı olan @AzureSupport ile bağlantı kurun. Azure topluluğunun doğru kaynaklara bağlanması: 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.