Share via


Apache HBase HBCK2 aracını kullanma

Bu makalede HBase HBCK2 aracının nasıl kullanılacağı gösterilmektedir. HBCK2, Apache HBase kümeleri için onarım aracıdır.

HBCK2'ye genel bakış

HBCK2 şu anda tek seferde yalnızca bir şey çalıştıran basit bir araçtır. hbase-2.x'te, Ana tüm durumun son arbiter'ıdır, bu nedenle çoğu HBCK2 komutu için genel bir ilke, Ana'dan tüm onarımları yapmasını istemesidir.

HBCK2 komutlarını çalıştırabilmeniz için önce ana şablonun çalışır durumda olması gerekir. HBCK1 analiz gerçekleştirdi ve kümenizi iyi veya kötü olarak bildirdi, ancak HBCK2 daha az küstahçadır. hbase-2.x'te, operatör neyin düzeltilmesi gerektiğini belirler ve ardından onarım yapmak için HBCK2 de dahil olmak üzere araçları kullanır.

HBCK2 ile HBCK1 karşılaştırması

Hbase-1.x (HBCK1 olarak da bilinir) ile birlikte gelen onarım aracı HBCK'nin ardılı HBCK2'dir. Hbase-2.x kümelerinde onarım yapmak için HBCK1 yerine HBCK2 kullanabilirsiniz. Hbase-2.x yüklemesinde HBCK1 çalıştırılmamalıdır çünkü hasar verebilir. Yazma tesisi (-fix) kaldırıldı. Bir hbase-2.x kümesinin durumunu bildirebilir, ancak hbase-2.x kümesinin iç çalışmalarını anlamadığından değerlendirmeleri yanlıştır.

HBCK2, komutların iki sürümde benzer şekilde adlandırıldığı durumlarda bile HBCK1'in kullandığı gibi çalışmaz.

HBCK2 edinme

Sürümü HBase dağıtım dizini altında bulabilirsiniz. Daha fazla bilgi için HBase indirmeleri sayfasına bakın.

Ana Kullanıcı Arabirimi: HBCK Raporu

2.1.6'da /hbck.jsp Master'a eklenen HBCK Raporu sayfası, Ana Denetim tarafından bir aralıkta çalıştırılan iki incelemenin çıkışını gösterir. Biri, her çalıştırıldığında tarafından çıkışıdır CatalogJanitor . içinde hbase:metaörtüşmeler veya delikler bulunursa, CatalogJanitor buldukları listelenir. Başka bir arka plan chore işlemi ve dosya sistemi içeriğini karşılaştırır hbase:meta . Anomali bulunursa HBCK Raporu bölümünde bir not alır.

komutunu CatalogJanitorçalıştırmak için hbase kabuğunda komutunu yürütür: catalogjanitor_run.

komutunu hbck choreçalıştırmak için hbase kabuğunda komutunu yürütür: hbck_chore_run.

Her iki komut da giriş almaz.

HBCK2 çalıştırma

Komut dosyasını hbck betik aracılığıyla $HBASE_HOME/bin/hbase başlatarak komutunu çalıştırabilirsiniz. Varsayılan olarak, komutunu çalıştırdığınızda bin/hbase hbck, yerleşik HBCK1 araçları çalıştırılır. HBCK2'yi çalıştırmak için, bu örnekte olduğu gibi seçeneğini kullanarak yerleşik bir HBCK2 jar'ını -j işaret etmeniz gerekir:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar

Bu komut, seçenekleri veya bağımsız değişkenleri geçirmeden HBCK2 yardımını yazdırır.

HBCK2 komutları

Not

Bu komutları üretim ortamında çalıştırmadan önce işlevselliği anlamak için bir test kümesinde test edin.

assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...

Seçenekler:

  • -o,--override: Sahipliği başka bir yordamla geçersiz kılar.
  • -i,--inputFiles: Bir veya daha fazla kodlanmış bölge adı alır.

Bu raw atama ana başlatma sırasında bile kullanılabilir (bayrak belirtilirse -skip ). Birlikte çalışanlara destek sağlar ve bir veya daha fazla kodlanmış bölge adını geçirir. de00010733901a05f5a2a3a382e27dd4 , kullanıcı alanı kodlanmış bölge adının nasıl göründüğüne bir örnektir. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4

Oluşturulan AssignProcedures piD'leri veya yoksa -1 döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir tane olacak şekilde kodlanmış bölge adları içerir. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2

unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...

Seçenekler:

  • -o,--override: Sahipliği başka bir yordamla geçersiz kılar.
  • -i,--inputFiles: Kodlanmış adlardan bir veya daha fazla giriş dosyası alır.

Bu raw atamayı kaldırma ana başlatma sırasında bile kullanılabilir (bayrak belirtilirse -skip ). Birlikte çalışanlara destek sağlar ve bir veya daha fazla kodlanmış bölge adını geçirir. de00010733901a05f5a2a3a382e27dd4 , kullanıcı geçersiz kılma alanı kodlanmış bölge adının nasıl göründüğüne bir örnektir. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4 

Oluşturulan UnassignProcedures piD'leri veya yoksa -1 döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir tane olacak şekilde kodlanmış bölge adları içerir. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2

bypass [OPTIONS] <PID>...

Seçenekler:

  • -o,--override: Yordam çalışıyorsa veya takıldıysa geçersiz kılar.
  • -r,--recursive: Üst öğeyi ve alt öğelerini atlar. Bu seçenek yavaş ve pahalıdır.
  • -w,--lockWait: Pes etmeden önce milisaniye bekler. Varsayılan=1.
  • -i,--inputFiles: PiD'lerin bir veya daha fazla giriş dosyasını alır.

Yordam bitişine atlamak için bir veya daha fazla yordam PID'sini geçirir. Atlanan yordamın üst öğesi bitişe atlar. Varlıklar tutarsız durumda bırakılır ve el ile onarım gerektirir. Hala tutulan kilitleri temizlemek için Ana yeniden başlatma gerekebilir. Yordamın alt öğeleri varsa atlama başarısız olur. Sahip olduğunuz tek şey üst öğeyi ve alt öğeleri tamamlamak için bir üst PID ise ekleyin recursive . Bu seçenek yavaş ve tehlikelidir, bu nedenle seçmeli olarak kullanın. Her zaman işe yaramaz.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>

belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirin. Her dosya, satır başına bir tane olan PID'ler içerir. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2

reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Seçeneği:

  • i,--inputFiles: Ad alanı veya tablo adlarından bir veya daha fazla giriş dosyası alır.

Bölgelerin hbase:meta eksik olduğu ancak HDFS'de dizinlerin hala mevcut olduğu durumlarda bu seçeneği kullanın. Bu komut yalnızca bir denetim yöntemidir. Raporlama amacıyla tasarlanmıştır ve herhangi bir düzeltme gerçekleştirmez. İlgili tabloya veya ad alanına göre gruplandırılmış hbase:metaolarak hangi bölgelerin (varsa) olarak okunacağının bir görünümünü sağlar.

Meta'da bölgeleri etkili bir şekilde okumak için komutunu çalıştırın addFsRegionsMissingInMeta. Bu komutun çevrimiçi olması gerekir hbase:meta . Parametre olarak geçirilen her ad alanı/tablo için, içinde bulunan bölgeler arasında HDFS'deki hbase:meta mevcut bölgelerin dirlerine göre fark gerçekleştirir. Eşleşmesi olmayan bölge dirs ilgili tablo adının altında gruplandırılır. Eksik bölge olmayan tablolarda "eksik bölge yok" iletisi gösterilir. Ad alanı veya tablo belirtilmezse, mevcut tüm bölgeleri doğrular.

Birden çok ad alanı ve tablonun birleşimini kabul eder. Tablo adları, varsayılan ad alanında yer alan tablolar için bile ad alanı bölümünü içermelidir. Aksi takdirde, bir ad alanı değeri varsayılır. Bu örnek, ve tabloları table_1table_2için varsayılan ad alanı altında eksik bölge raporlarını tetikler:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2

Bu örnek, varsayılan ad alanı altındaki tablo table_1 ve ad alanından tüm tablolar ns1için eksik bölgeler raporunu tetikler:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1

Parametre olarak geçirilen her tablo için veya parametre olarak belirtilen ad alanları üzerindeki her tablo için eksik bölgelerin listesini döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosyada satır başına bir tane bulunur <NAMESPACE|NAMESPACE:TABLENAME>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2

addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Seçeneği:

  • -i,--inputFiles: Bölgelerin eksik olduğu ancak dizinlerin HDFS'de hala mevcut olduğu durumlarda kullanılacak ad alanı tablo adlarının hbase:meta bir veya daha fazla giriş dosyasını alır. Çevrimiçi olması gerekiyor hbase:meta .

Parametre olarak geçirilen her tablo adı için, içinde kullanılabilen bölgeler ile HDFS'deki hbase:meta bölge dir'leri arasında fark gerçekleştirir. Ardından eşleşmesi olmayan hbase:meta dirs için meta veri dosyasını okur regioninfo ve içinde hbase:metabelirli bir bölgeyi yeniden oluşturur. Bölgeler tablodaki CLOSED durumunda hbase:meta yeniden oluşturulur, ancak önbellekte Masters oluşturulmaz. Bunlar da atanmadı. Bu bölgeleri çevrimiçi yapmak için, bu komut çalıştırması tamamlandığında yazdırılan HBCK2 assigns komutunu çalıştırın.

2.3.0'dan eski hbase sürümlerini kullanıyorsanız, çıkış kümesini assigns yürütmeden önce HMasters'ın sıralı yeniden başlatılması gerekir. Bu örnek, varsayılan ad alanında, tbl_2 ad alanında ve ad n1alanından tüm tablolar n2için eksik bölgeler tbl_1 ekler:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

HBCK2 ve tüm yeniden eklenmiş bölgeleri içeren bir assigns komut döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir tane içerir <NAMESPACE|NAMESPACE:TABLENAME>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2

extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Seçenekler:

  • -f, --fix: Bulunan tüm ek bölgeleri kaldırarak metayı düzeltir.
  • -i,--inputFiles: Ad alanı veya tablo adlarının bir veya daha fazla giriş dosyasını alır.

Dosya sisteminde ilgili dizinleri olmayan ancak üzerinde hbase:meta bulunan bölgeleri bildirir. Çevrimiçi olması gerekiyor hbase:meta . Parametre olarak geçirilen her tablo adı için, içinde kullanılabilen hbase:meta bölgeler ile belirli dosya sistemindeki bölge dir'leri arasında fark gerçekleştirir. Seçeneği geçerse --fix ek bölgeler Meta'dan silinir.

Not

Seçeneği kullanmaya --fix karar vermeden önce, bildirilen ek bölgelerin mevcut geçerli bölgelerle çakışıp çakışmadığı denetlenmelidir. Öyleyse, extraRegionsInMeta --fix en uygun çözümdür. Aksi takdirde, assigns komut daha basit bir çözümdür. Yoksa, dosya sistemindeki bölgelerin dirlerini yeniden oluşturur.

Bu örnek, varsayılan ad alanı altında ve ad ns1alanından tüm tablolar için için ek bölge raporlarını table_1 tetikler:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1

Bu örnek, varsayılan ad alanı altında ve düzeltme seçeneğiyle ad alanından ns1 tüm tablolar için ek bölge raporlarını table_1 tetikler:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1

Parametre olarak geçirilen her tablo için veya parametre olarak belirtilen ad alanları üzerindeki her tablo için ek bölgelerin listesini döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirin. Her dosya, satır başına bir tane içerir <NAMESPACE|NAMESPACE:TABLENAME>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2

fixMeta

Not

Bu seçenek HBase 2.1.6 ile iyi çalışmaz. 2.1.6 HBase kümesinde kullanılması önerilmez.

içinde hatalı veya tutarsız durumda sunucu tarafı düzeltmesi hbase:metayapın. Ana kullanıcı arabiriminin en son çalıştırması catalogjanitor tarafından oluşturulan raporların dökümünü alan eşleşen yeni HBCK Report bir sekmesi ve yeni hbck chorebir sekmesi vardır.

Başka onarımlar yapmadan önce sağlıklı hale getirmeniz çok önemlidirhbase:meta. hdfs'de eklenen bölgeleri eşleştirmek için ve overlaps'yi düzeltir holes (boş) bölge hbase:metadizinleri oluşturur.

Bu komut, benzer şekilde adlandırılan eski hbck1 komutuyla aynı değildir. Son tarafından oluşturulan ve hbck chore çalıştırılan raporlarda catalog_janitor çalışır. Düzeltecek bir şey yoksa çalıştırma bir döngüdür. Aksi takdirde, kullanıcı arabirimi sorunları bildirirse HBCK Report bir çalıştırma fixMeta sorunları temizler hbase:meta .

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

Bu komut, eksik bir tablo tanımlayıcı dosyası oluşturarak bir yalnız bırakılmış tabloyu düzeltmeye çalışır. Tablo klasörü eksikse .tableinfo veya varsa bu komutun hiçbir etkisi olmaz. (Mevcut tablo tanımlayıcılarını geçersiz kılmayız.) Bu komut önce HBase Master'da önbelleğe alınıp alınmadığını TableDescriptor denetler ve bu durumda uygun şekilde kurtarılır .tableinfo . TableDescriptor Ana şablonda önbelleğe alınmadıysa, aşağıdaki öğelerle bir varsayılan .tableinfo dosya oluşturur:

  • Tablo adı.
  • Dosya sistemine göre belirlenen sütun ailesi listesi.
  • hem ColumnFamilyDescriptorshem de TableDescriptor için varsayılan özellikler. .tableinfo Dosya varsayılan parametreler kullanılarak oluşturulduysa tablo veya sütun ailesi özelliklerini daha sonra denetlediğinizden emin olun. (Gerekirse değiştirin.) Bu yöntem HBase'de hiçbir şeyi değiştirmez. Yalnızca yeni .tableinfo dosyayı dosya sistemine yazar. Yalnız bırakılmış tablolar için, örneğin ServerCrashProcedures , devam etmek için eksik tablo bilgi dosyalarını oluşturduktan sonra hatayı düzeltmeniz gerekebilir.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name

replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]

Seçenekler:

  • -f, --fix: Bulunan çoğaltma sorunlarını düzeltir.
  • -i,--inputFiles: Tablo adlarının bir veya daha fazla giriş dosyasını alır.

Silinmemiş çoğaltma kuyruklarını arar ve seçeneği geçerse --fix bunları siler. Çoğaltma engelini denetlemek ve varsa --fixtemizlemek için bir tablo adı geçirir.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name

belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir tane içerir <TABLENAME>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2

setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]

Seçeneği:

  • -i,--inputFiles: Kodlanmış bölge adlarının ve durumlarının bir veya daha fazla giriş dosyasını alır.

Olası bölge durumları:

  • ÇEVRİMDIŞI
  • AÇILIŞ
  • AÇIK
  • CLOSIN
  • KAPALI
  • BÖLME
  • SPLİT
  • FAILED_OPEN
  • FAILED_CLOSE
  • BİRLEŞTİRME
  • -LEŞTİRİLMİŞ
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Uyarı

Bu riskli seçenek yalnızca son çare olarak kullanılmak üzere tasarlanmıştır.

Örnek senaryolar, içinde bölge tutarsız bir durumda hbase:metaolduğundan ileri taşınamayan atamaları veya atamaları içerir. Örneğin, unassigns komut yalnızca şu durumlardan birinde bir bölge geçirildiyse devam edebilir: SPLITTING, SPLIT, BIRLEŞTIRME, AÇ VEYA KAPAT.

Bu komutla bölge durumunu el ile ayarlamadan önce, bu bölgenin veya splitgibi assign çalışan bir yordam tarafından işlenmediğini onaylarsınız. komutunu kullanarak list_procedures hbase kabuğunda çalışan yordamların görünümünü alabilirsiniz. Bu örnek bölgeyi de00010733901a05f5a2a3a382e27dd4 CLOSING olarak ayarlar:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING

Bölge durumunun değişip değişmediğini 1 döndürür0. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirin. Her dosya, satır başına bir çift içerir <ENCODED_REGIONNAME> <STATE>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2

setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]

Seçeneği:

  • -i,--inputFiles: Tablo adlarının ve durumlarının bir veya daha fazla giriş dosyasını alır.

Olası tablo durumları ETKİLİ, DEVRE DIŞI, DEVRE DIŞI VE ETKİLEME şeklindedir.

Geçerli tablo durumunu okumak için hbase kabuğunda şunu çalıştırın:

hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'

x08x00 == ENABLED, x08x01 == DISABLED gibi bir değer. Ayrıca kabuk isteminde de çalıştırılabilir describe <TABLENAME> . Bu örnek, tablo adını user ENABLED yapar:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED

Önceki tablo durumunu döndürür. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir çift içerir <TABLENAME> <STATE>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2

scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...

Seçeneği:

  • -i,--inputFiles: Sunucu adlarının bir veya daha fazla giriş dosyasını alır.

listesini RegionServerszamanlayınServerCrashProcedure(SCP). Sunucu adını olarak <HOSTNAME>,<PORT>,<STARTCODE>biçimlendirin. (Bkz. HBase kullanıcı arabirimi/günlükleri.)

Bu örnekte kullanılır RegionServera.example.org, 29100,1540348649479:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479

Oluşturulan ServerCrashProcedures öğesinin PID'lerini veya hiçbir yordam oluşturulmamışsa -1'i döndürür. (Neden olmadığını öğrenmek için bkz. Ana günlükler.) Komut desteği HBase sürüm 2.0.3, 2.1.2, 2.2.0 veya daha yeni sürümlere eklenir. belirtilirse -i or --inputFiles , bir veya daha fazla giriş dosyası adı geçirir. Her dosya, satır başına bir tane içerir <SERVERNAME>. Örnek:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2 

Sorunları düzeltme

Bu bölüm yaygın sorunları gidermenize yardımcı olur.

Genel ilkeler

Onarım yaparken, dosya sistemi sapması gibi başka bir sorun türünü düzeltmeden önce tutarlı olduğundan emin olunhbase:meta. Dosya sistemindeki sapma veya atamayla ilgili sorunlar, sıralandıktan sonra hbase:meta ele alınmalıdır. Sorun varsa hbase:meta , Ana dosya sistemi verilerini benimsediğinde veya bölge atamaları yaptığında uygun yerleştirmeleri yapamaz.

Bölge, ÖNCE KAPALI üzerinden geçiş yapılmadan CLOSING durumundaysa (veya AÇIK durumdaysa atanmamışsa) atanamaz. Bölgeler her zaman KAPALI, AÇIK, AÇIK ve sonra DA KAPALI ve KAPALI olarak taşınmalıdır.

Onarım yaptığınızda tabloları teker teker düzeltin.

Tablo DEVRE DIŞI ise, bölge atayamazsınız. Ana günlüklerde, tablo DISABLED olduğundan Ana raporların atlandığını görürsünüz. Şu anda AÇILIŞ durumunda olduğundan ve tablonun DISABLED durumunu kabul edebilmesi için BÖLGEYİ KAPALI durumda olmasını istediğinizden atayabilirsiniz. Bu durumda, atamayı gerçekleştirebilmeniz için tablo durumunu geçici olarak ENABLED olarak ayarlamanız gerekebilir. Ardından unassign deyiminden sonra yeniden ayarlarsınız. HBCK2, bu değişikliği yapmanıza izin verecek bir tesise sahiptir. Bkz. HBCK2 kullanım çıkışı.

Atama ve atamayı kaldırma

Genellikle atamada Ana şablon başarılı olana kadar devam eder. Atama, bölgede özel kullanım kilidi alır. Kilit, eş zamanlı atama veya atamayı kaldırma işleminin çalışmasını engeller. Kilitli bölgeye karşı atama, ilerlemeyi sağlamadan önce kilidin serbest bırakılabilmesini bekler.

Master startup cannot progress, in holding-pattern until region online:

2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.

(veyahbase:namespace) atanacak hbase:meta bir yordam olmadığından Ana Şablon başlatmaya devam edemiyor. Eklemek için HBCK2 aracını kullanın:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740

Bu örnekte, 1588230740 bölgenin kodlanmış adıdır hbase:meta . -skip HBCK2'nin uzak Ana Şablonda sürüm denetimi yapmasını durdurma seçeneğini geçirin. Uzak Ana Şablon çalışmıyorsa, sürüm denetimi bir Master is initializing response veya PleaseHoldException ister ve atama girişimini bırakır. komutu -skip sürüm denetiminden kaçınarak zamanlanmış atamayı alır.

Aynı durum sistem tablosunda da hbase:namespace olabilir. Bölgenin kodlanmış bölge adını hbase:namespace arayın ve için hbase:metayaptığımıza benzer adımları uygulayın. Bu ikinci durumda, Asıl aslında şu örneğe benzer yararlı bir ileti yazdırır:

2019-07-09 22:08:38,966 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

Önceki günlük satırında belirtilen tabloya atama zamanlamak için hbase:namespace :

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae

Ad alanı bölgesi için kodlanmış adı geçirin. (Kodlanmış ad dağıtıma göre farklılık gösterir.)

hbase:meta bölgesi/tablo geri yükleme/yeniden derlemede eksik bölgeler

Bazı olağan dışı durumlarda tablodan hbase:meta tablo bölgeleri kaldırılmıştır. Bu vakalarda önceliklendirme, bunların işleç kaynaklı olduğunu ortaya çıkardı. Kullanıcılar bir HBCK2 kümesinde eski HBCK1 OfflineMetaRepair aracını çalıştırmıştır. OfflineMetaRepair, HBase 1.x sürümlerinde tabloyla ilgili sorunları düzeltmek hbase:meta için iyi bilinen bir araçtır. Özgün sürüm HBase 2.x veya üzeri sürümlerle uyumlu değildir ve bazı ayarlamalardan geçmiştir. Aşırı durumlarda, artık HBCK2 aracılığıyla çalıştırılabilir.

Bu durumların çoğunda bölgeler rastgele olarak eksik hbase:meta kalır, ancak hbase hala çalışır durumda olabilir. Bu gibi durumlarda, HBCK2'de komutu kullanılarak addFsRegionsMissingInMeta sorun Ana Çevrimiçi ile giderilebilir. Bu komut daha sonra ele alınan tam hbase:meta yeniden derlemeden daha az kesintiye neden olur. Ad alanı tablo bölgesini kurtarmak için bile kullanılabilir.

hbase:meta bölgesinde/tablosundaki ek bölgeler geri yükleme/yeniden derleme

Ayrıca, dosya sisteminde tablo bölgelerinin kaldırıldığı ancak tabloda ilgili girişlerin hbase:meta olduğu durumlar da olabilir. Bölme, el ile işlem hataları (bölge dirini el ile silme veya taşıma gibi) ve hatta HBASE-21843 gibi meta bilgi veri kaybı sorunları nedeniyle bu senaryo oluşabilir.

Bu tür sorunlar HBCK2'deki komutu kullanılarak extraRegionsInMeta --fix Ana Şablon ile çevrimiçi olarak giderilebilir. Bu komut daha sonra ele alınan tam hbase:meta yeniden derlemeden daha az kesintiye neden olur. Bu durum HBCK2 seçeneğini desteklemeyen fixMeta sürümlerde (2.0.6, 2.1.6, 2.2.1, 2.3.0 veya 3.0.0 öncesi sürümler) olduğunda da yararlıdır.

Çevrimiçi hbase:meta yeniden derleme tarifi

Bozulma çok kritik değilse hbase:meta , hbase yine de çevrimiçi hale getirebilir. Ad alanı bölgesi eksik bölgeler arasında olsa bile, ana ad alanının atanmayı beklediği başlatma döneminde tarama hbase:meta yapmak mümkündür. Bu durumu doğrulamak için bir hbase:meta tarama komutu yürütülebilir. Zaman aşımına uğradıysa veya herhangi bir hata göstermiyorsa, hbase:meta çevrimiçidir:

echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell

İletide hata gösterilmiyorsa HBCK2 addFsRegionsMissingInMeta kullanılabilir. içinde bölgeleri yeniden oluşturmak için FS bölge dizinlerinde bulunan bölge hbase:metameta veri bilgilerini okur. hbase ile kısmen çalışır durumda olabileceğinden, bildirilen sorundan etkilenen çevrimiçi tabloları devre dışı bırakmaya çalışır ve olarak okunan bölgelere hbase:metagider. Belirli tabloları veya ad alanlarını ya da tüm ad alanlarının tüm tablolarını denetleyebilir. Bu örnekte, varsayılan ad alanında, tbl_2 ad alanında ve ad n1alanından tüm tablolar tbl_1 için eksik bölgelerin n2eklenmesi gösterilmektedir:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

Ana şablondan bağımsız olarak çalıştığından, başarıyla tamamlandıktan sonra, okunan bölgelerin atanmasını sağlamak için daha fazla adım gerekir. Bu iletiler aşağıdaki gibi listelenir:

  • addFsRegionsMissingInMeta okunan tüm bölgeleri içeren bir assigns komutunun çıkışını alır. Bu komut daha sonra yürütülmelidir, bu nedenle kopyalayın ve kolaylık sağlamak için kaydedin.
  • 2.3.0 öncesi HBase sürümleri için, başarıyla tamamlandıktan ve çıkış kaydedildikten sonra addFsRegionsMissingInMeta çalışan tüm HBase Masters'ı yeniden başlatın.

Ana şablonlar yeniden başlatıldıktan ve hbase:meta çevrimiçi olduktan sonra (web kullanıcı arabiriminin erişilebilir olup olmadığını denetleyin), daha önce kaydedilen çıktıdan addFsRegionsMissingInMeta assigns komutunu çalıştırın.

Not

Ad alanı bölgesi eksik bölgeler arasındaysa, döndürülen assigns komutunun başına bayrağını eklemeniz --skip gerekir.

Bir küme tabloda yıkıcı bir kayıp hbase:meta yaşarsa, aşağıdaki tarifi kullanarak kaba bir yeniden derleme mümkündür. Ana hat olarak kümeyi durdururuz. Dosya sistemine bırakılan dizinleri ve meta verileri okuyan ve uygun hbase:met bir tabloyu yeniden oluşturmak için en iyi çabayı gösteren HBCK2 OfflineMetaRepair aracını çalıştırın. Kümenizi yeniden başlatın. Sistem ad alanı tablosunu çevrimiçi yapmak için bir atama ekleyin. Son olarak, etkinleştirilmesini istediğiniz kullanıcı alanı tablolarını yeniden atayın. (Yeniden oluşturulan hbase:meta , tüm tabloları çevrimdışı olan ve hiçbir bölge atanmamış bir tablo oluşturur.)

Ayrıntılı yeniden derleme tarifi

Not

Bu seçeneği yalnızca son çare olarak kullanın. Bunu önermiyoruz.

  • Kümeyi durdurun.

  • HBCK2'den rebuild hbase:meta komutunu çalıştırın. Bu komut özgün hbase:meta dosyayı bir kenara taşır ve yeni yeniden oluşturulmuş bir komutu yerleştirir. Bu örnekte aracın nasıl çalıştırılacakları gösterilmektedir. Aracın HDFS'de -details bulduğu bölgelere bilgi dökümü oluşturması için bayrağını ekler:

    hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
    
  • Kümeyi başlatın. Tam olarak başlamaz. Ad alanı tablosu çevrimiçi olmadığından ve yordam deposunda bu olasılık için atama yordamı olmadığından takıldı. HBase Master günlüğü bu durumu gösterir. Bu örnekte günlüğe nelerin günlüğe ekli olduğu gösterilmektedir:

    2019-07-10 18:30:51,090 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
    

    Ad alanı tablosu bölgesini atamak için kabuğu kullanamazsınız. Kabuğu kullanırsanız, Ana şablon henüz çalışır halde olmadığından ile PleaseHoldException başarısız olur. (Ad alanı tablosunun kendisini "yukarı" olarak bildirmeden önce çevrimiçi olmasını bekliyor.) HBCK2 assigns komutunu kullanmanız gerekir. Atamak için ad alanı kodlanmış adına ihtiyacınız vardır. Alıntılanan günlükte gösterilir. Bu örnekte böyledir 725a0fe6c2c869d3d0a9ed82bfa80fa3 . Ana sürüm denetimini atlamak için komutunu geçirmeniz -skip gerekir. (Bu olmadan, HBCK2 çağrınız Ana Şablon henüz çalışır durumda olmadığından öğesini zorlar PleaseHoldException .) Bu örnek, ad alanı tablosunun atamasını ekler:

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    

    Çağrı ile Connection refusedgeri gelirse Ana Şablon çalışır durumda mı? Ana şablon, kendisini başlatamazsa bir süre sonra kapanır. Kümeyi/Ana Şablonu yeniden başlatın ve assigns komutunu yeniden çalıştırın.

  • Atamalar başarıyla çalıştırıldığında, aşağıdaki örneğe benzer bir şey yaydığı görürsünüz. 48 sonundaki, atama yordamı zamanlamasının PID'sini gösterir. Döndürülen PID ise -1, Ana başlatma yeterince ilerlememiştir, bu nedenle yeniden deneyin. Veya kodlanmış bölge adı yanlış olabilir, bu nedenle bu sorunu denetleyin.

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    
    18:40:43.817 [main] WARN  org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    18:40:44.315 [main] INFO  org.apache.hbase.HBCK2 - hbck sufpport check skipped
    [48]
    
  • Ana günlükleri denetleyin. Usta yukarı gelmeliydi. PID=48'in başarıyla tamamlanmasını görürsünüz. Başarılı bir Ana başlatmayı doğrulamak için aşağıdaki örneğe benzer bir satır arayın:

    master.HMaster: Master has completed initialization 132.515sec
    

    Görünmesi biraz zaman alabilir.

    yeniden derlemesi hbase:meta DISABLED durumundaki kullanıcı tablolarını ve CLOSED modundaki bölgeleri ekler. Tüm tablo bölgelerini yeniden çevrimiçi duruma getirmek için kabuk aracılığıyla tabloları yeniden etkinleştirme. Bunu tek tek yapın veya tüm tabloları aynı anda etkinleştirmek için tüm ".*" özelliğini etkinleştir komutuna bakın.

    Yeniden derleme meta dosyasında düzenlemeler eksik ve bu makalede daha önce özetlenen tesisi kullanarak sonraki onarım ve temizleme işlemleri gerekebilir.

Bırakılan başvuru dosyaları, eksik hbase.version dosyası ve bozuk dosyalar

HBCK2 asılı başvuruları ve bozuk dosyaları denetleyebiliyor. Bölgelerin çevrimiçi olmadığı veya okumaların başarısız olduğu hörgüçleri aşmak için gerekli olabilecek kötü dosyaları kenar çizgisine almalarını isteyebilirsiniz. HBCK2 listesinde dosya sistemi komutuna bakın. Bir veya daha fazla tablo adı geçirin (veya tüm tabloları denetlemek için kullanın none ). Hatalı dosyalar bildirilir. --fix Onarım yapma seçeneğini geçirin.

Yordamı yeniden başlatma

Son çare olarak, Ana şablon bozulacaksa ve tüm onarım girişimleri yalnızca tamamlanamayan geri alınamaz kilitleri veya yordamları açarsa veya kümesi MasterProcWALs sınır olmadan büyüyorsa, Ana durumu temizlemek mümkündür. HBase yüklemenizin /hbase/MasterProcWALs/ altındaki dizini bir kenara bırakın ve Ana işlemi yeniden başlatın. Bellek olmadan tablo biçiminde geri döner.

Silme sırasında tüm bölgeler mutlu bir şekilde atandıysa veya çevrimdışıysa, Ana sunucu yeniden başlatıldığında, Ana sunucu hiçbir şey olmamış gibi devam etmeli ve devam etmelidir. Ancak o sırada geçişte bölgeler varsa, operatörün terminal noktasına bekleyen atamaları veya atamaları kaldırmayı sağlamak için müdahalede bulunmaları gerekir.

Nelerin hbase:metainfo:state atanması veya atanması gerekmediğini belirlemek için sütunları açıklandığı gibi okuyun. tüm geçmiş silindikten sonra öğesini bir kenara MasterProcWALstaşıyarak varlıkların hiçbiri kilitlenmemelidir, bu nedenle toplu olarak atayabilir veya atamasını kaldırabilirsiniz.