Aracılığıyla paylaş


Varsayılan Hive meta veri deposu VERITABANıNı dış meta veri deposu DB'ye geçirme

Bu makalede, Hive için varsayılan meta veri deposu db'sinden HDInsight'ta dış SQL Veritabanı meta verilerin nasıl geçir adımları gösterilmektedir.

Dış meta veri deposu DB'ye geçiş neden

  • Varsayılan meta veri deposu VERITABANı temel SKU ile sınırlıdır ve üretim ölçeği iş yüklerini işleyemez.

  • Dış meta veri deposu VERITABANı, aynı meta veri deposu db'sini paylaşan yeni HDInsight kümeleri ekleyerek müşterinin Hive işlem kaynaklarını yatay olarak ölçeklendirmesini sağlar.

  • HDInsight 3.6'dan 4.0'a geçiş için, Hive şema sürümünü yükseltmeden önce meta verilerin dış meta veri deposu DB'ye geçirilmesi zorunludur. Bkz. hdInsight 3.6'dan HDInsight 4.0'a iş yüklerini geçirme.

Varsayılan meta veri deposu veritabanı sınırlı işlem kapasitesine sahip olduğundan, meta verileri geçirirken kümedeki diğer işlerden düşük kullanım önerilir.

Kaynak ve hedef DB'ler aynı HDInsight sürümünü ve aynı Depolama Hesaplarını kullanmalıdır. HDInsight sürümlerini 3.6'dan 4.0'a yükseltiyorsanız, önce bu makaledeki adımları tamamlayın. Ardından , buradaki resmi yükseltme adımlarını izleyin.

Önkoşullar

Azure Data Lake Storage 1. Nesil kullanılıyorsa, Hive tablo konumları büyük olasılıkla Azure Data Lake Storage 1. Nesil için kümenin HDFS yapılandırmalarına bağlıdır. Bu konumları diğer kümelere taşınabilir hale getirmek için aşağıdaki betik eylemini çalıştırın. Bkz. Çalışan bir kümeye betik eylemi.

Eylem, symlink'leri tam yolları ile değiştirmeye benzer.

Özellik Değer
Bash betik URI'si https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Düğüm türleri Head
Parametreler ""

sqlpackage kullanarak Dışarı/İçeri Aktarma ile geçiş

Yalnızca 2020-10-15 sonrasında oluşturulan bir HDInsight kümesi, kullanarak sqlpackageHive varsayılan meta veri deposu VERITABANı için SQL Dışarı/İçeri Aktarmayı destekler.

  1. Kümeye sqlpackage yükleyin.

  2. Aşağıdaki komutu yürüterek varsayılan meta veri deposu DB'sini BACPAC dosyasına aktarın.

    wget "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive_metastore_tool.py"
    SQLPACKAGE_FILE='/home/sshuser/sqlpackage/sqlpackage'  # replace with sqlpackage location
    TARGET_FILE='hive.bacpac'
    sudo python hive_metastore_tool.py --sqlpackagefile $SQLPACKAGE_FILE --targetfile $TARGET_FILE
    
  3. BACPAC dosyasını kaydedin. Aşağıda bir seçenek vardır.

    hdfs dfs -mkdir -p /bacpacs
    hdfs dfs -put $TARGET_FILE /bacpacs/
    
  4. BACPAC dosyasını burada listelenen adımları içeren yeni bir veritabanına aktarın.

  5. Yeni veritabanı, yeni bir HDInsight kümesinde dış meta veri deposu VERITABANı olarak yapılandırılmaya hazırdır.

Hive betiğini kullanarak geçirme

2020-10-15'te oluşturulan kümeler, varsayılan meta veri deposu db'sinin dışarı/içeri aktarılmasını desteklemez.

Bu tür kümeler için, dış Hive meta veri deposu db'sine sahip ikinci bir küme kullanarak Hive tablolarını Depolama Hesapları arasında kopyalama kılavuzunu izleyin. İkinci küme aynı depolama hesabını kullanabilir ancak yeni bir varsayılan dosya sistemi kullanmalıdır.

"Sığ" kopyalama seçeneği

Yukarıdaki kılavuz kullanılarak tablolar "derin" kopyalandığında depolama tüketimi iki katına çıktığında. Kaynak depolama kapsayıcısında verileri el ile temizlemeniz gerekir. Bunun yerine, işlemsel olmayan tabloları "sığ" olarak kopyalayabiliriz. HDInsight 3.6'daki tüm Hive tabloları varsayılan olarak işlem dışıdır, ancak HDInsight 4.0'da yalnızca dış tablolar işlem dışıdır. İşlem tabloları derin kopyalanmalıdır. İşlem dışı tabloları basit bir şekilde kopyalamak için şu adımları izleyin:

  1. Her Hive tablosu için DDL oluşturmak üzere kaynak kümenin birincil baş düğümünde betik hive-ddls.sh yürütebilirsiniz.
  2. DDL, adlı /tmp/hdi_hive_ddls.hqlyerel bir Hive betiğine yazılır. Bunu dış Hive meta veri deposu VERITABANı kullanan hedef kümede yürütür.

Tüm Hive tablolarının içeri aktarıldığını doğrulayın

Aşağıdaki komut, tüm Hive tablolarını ve veri konumlarını yazdırmak için meta veri deposu veritabanında bir SQL sorgusu kullanır. Yeni meta veri deposu db'sinde tablo eksik olmadığını doğrulamak için yeni ve eski kümeler arasındaki çıkışları karşılaştırın.

SCRIPT_FNAME='hive_metastore_tool.py'
SCRIPT="/tmp/$SCRIPT_FNAME"
wget -O "$SCRIPT" "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/$SCRIPT_FNAME"
OUTPUT_FILE='/tmp/hivetables.csv'
QUERY="SELECT DBS.NAME, TBLS.TBL_NAME, SDS.LOCATION FROM SDS, TBLS, DBS WHERE TBLS.SD_ID = SDS.SD_ID AND TBLS.DB_ID = DBS.DB_ID ORDER BY DBS.NAME, TBLS.TBL_NAME ASC;"
sudo python "$SCRIPT" --query "$QUERY" > $OUTPUT_FILE

Daha fazla bilgi