Aracılığıyla paylaş


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 bir 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üstahtır. hbase-2.x'te işleç nelerin 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 gönderilen onarım aracı HBCK'nin ardılı HBCK2'dir. Hbase-2.x kümelerinde onarımlar yapmak için HBCK1 yerine HBCK2 kullanabilirsiniz. Hbase-2.x yüklemesinde HBCK1 çalıştırılmamalıdır çünkü zarar 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üm arasında benzer şekilde adlandırıldığı durumlarda bile HBCK1'in kullandığı gibi çalışmaz.

HBCK2'ye edinme

Sürümü HBase dağıtım dizininde 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ıştı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 çalıştırmak CatalogJanitoriçin hbase kabuğunda komutunu yürütür: catalogjanitor_run.

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

Her iki komut da herhangi bir giriş almaz.

HBCK2 çalıştırma

Komut dosyasını betik aracılığıyla $HBASE_HOME/bin/hbase başlatarak komutunu çalıştırabilirsinizhbck. 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, aşağıdaki ö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çenekler veya bağımsız değişkenler 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 ). Ortak işlemcileri eler 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. Örneğin:

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 olan kodlanmış bölge adları içerir. Örneğin:

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 ). Ortak işlemcileri eler 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. Örneğin:

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 olan kodlanmış bölge adları içerir. Örneğin:

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ılı kalırsa geçersiz kılar.
  • -r,--recursive: Üst öğeyi ve alt öğelerini atlar. Bu seçenek yavaş ve pahalıdır.
  • -w,--lockWait: Vazgeçmeden ö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 bir durumda bırakılır ve el ile onarım gerektirir. Hala tutulan kilitleri temizlemek için Ana yeniden başlatma gerekebilir. Yordamda alt öğeler varsa atlama başarısız olur. Üst öğeyi ve alt öğeleri tamamlamak için sahip olduğunuz tek şey 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. Örneğin:

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çenek:

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

Bölgelerin eksik hbase:meta olduğu ancak dizinlerin HDFS'de 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 tablo veya ad alanına göre gruplandırılmış hbase:metaolarak hangi bölgelerin (varsa) olarak okunacağını gösteren bir görünüm 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, HDFS'deki hbase:meta mevcut bölgelerin dirlerine göre kullanılabilir bölgeler arasında fark gerçekleştirir. Eşleşmesi olmayan bölge dirleri, ilgili tablo adı altında gruplandırılır. Eksik bölge olmayan tablolarda "eksik bölge yok" iletisi gösterilir. Ad alanı veya tablo belirtilmezse tüm mevcut bölgeleri doğrular.

Birden çok ad alanı ve tablonun birleşimini kabul eder. Tablo adları, varsayılan ad alanı içindeki 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_1 table_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 dosya, satır başına bir tane içerir <NAMESPACE|NAMESPACE:TABLENAME>. Örneğin:

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çenek:

  • -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, HDFS'de ve bölge dirlerinde hbase:meta bulunan bölgeler 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 atanmamış. 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 n1ad alanında ve ad alanı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 ekli 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>. Örneğin:

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 meta dosyasını 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 bulunan hbase:meta 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 ve belirli dosya sistemindeki bölge dirleri arasında fark gerçekleştirir. Seçeneğin geçirilmesi --fix durumunda ek bölgeler Meta'dan silinir.

Not

Bu seçeneği kullanmaya karar vermeden önce, bildirilen ek bölgelerin --fix mevcut geçerli bölgelerle çakışıp çakışmadığına bakabilirsiniz. Öyleyse, extraRegionsInMeta --fix en uygun çözümdür. Aksi takdirde komutu assigns daha basit bir çözümdür. Mevcut olmayan bölgelerin dizinlerini dosya sisteminde yeniden oluşturur.

Bu örnek, varsayılan ad alanı altında ve ad alanından tüm tablolar ns1iç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 ns1 alanından 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>. Örneğin:

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 HBCK Report yeni bir sekmesi ve yeni hbck chorebir sekmesi vardır.

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

Bu komut, benzer şekilde adlandırılan eski hbck1 komutuyla aynı değildir. Son catalog_janitor tarafından oluşturulan raporlarda çalışır ve hbck chore çalışır. Düzeltecek bir şey yoksa çalıştırma bir döngüdür. Aksi takdirde, kullanıcı arabirimi sorunları bildirirse HBCK Report , ç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 yalnız bırakılmış bir tabloyu düzeltmeye çalışır. Tablo klasörü eksikse veya .tableinfo 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 bunları 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 olup olmadığını --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>. Örneğin:

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çenek:

  • -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
  • KAPATILDI
  • BÖLME
  • YARMAK
  • 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 arasında, bölge içinde tutarsız bir durumda hbase:metaolduğundan ilerleyemeyen atamalar veya atamalar yer alır. Örneğin, unassigns komut yalnızca şu durumlardan birinde bir bölge geçirilirse devam edebilir: BÖLME, BÖLME, BIRLEŞTIRME, AÇIK 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 bir 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 döndürür 0 1 . 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>. Örneğin:

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çenek:

  • -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 BIRAKILAMA ve ETKİLEME'dir.

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 vb. değeri. 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>. Örneğin:

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çenek:

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

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

Bu örnekte kullanılır RegionServer a.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 piD'leri veya hiçbir yordam oluşturulmadıysa -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>. Örneğin:

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. Sorunlar varsa hbase:meta , Ana şablon yalnız bırakılmış dosya sistemi verilerini benimsediğinde veya bölge atamaları yaptığında uygun yerleştirmeleri yapamaz.

Bir bölge, ÖNCE KAPALI üzerinden geçiş yapılmadan CLOSING durumundaysa (veya TERSI, AÇILMA durumundaysa atanmamışsa) atanamaz. Bölgeler her zaman KAPALI, AÇIK, AÇIK ve sonra KAPATILAN ve KAPATILAN bölgelere geçmelidir.

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 DEVRE DIŞI olduğundan Ana raporların atlandığını görürsünüz. Şu anda AÇILMA 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 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 bir kilit alır. Kilit, eş zamanlı atamanın veya atamanın çalıştırılmasını engeller. Kilitli bölgeye yönelik atama, ilerlemeden ö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 . HBCK2'nin -skip uzak Ana Bilgisayarda sürüm denetimi yapmasını durdurma seçeneğini belirtin. 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çınıyor ve zamanlanmış atamayı teslim ediyor.

Sistem tablosunda da aynı durum oluşabilir hbase:namespace . Bölgenin kodlanmış bölge adını hbase:namespace arayın ve için hbase:metayaptığımız işlemle 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 tablo bölgeleri tablodan hbase:meta kaldırılmıştır. Bu vakalardaki ö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ış. OfflineMetaRepair, HBase 1.x sürümlerinde tabloyla ilgili sorunları düzeltmeye hbase:meta yönelik 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 olur, ancak hbase hala çalışır durumda olabilir. Bu gibi durumlarda sorun, HBCK2'deki komutu kullanılarak addFsRegionsMissingInMeta Master online 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ölgesi/tablo geri yükleme/yeniden derlemede ek bölgeler

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 Master 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 oluşturma 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 yapılabilir. 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 şu çevrimiçi durumdadır:

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 bölgeler olarak hbase:metaokunur. 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 komutu çıktısı 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 Ana Dosyalarını yeniden başlatın.

Ana şablonlar yeniden başlatıldıktan ve hbase:meta zaten ç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ümede tabloda yıkıcı bir kayıp yaşanırsa hbase:meta , aşağıdaki tarifi kullanarak kaba bir yeniden derleme yapılabilir. 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çine getirmek için bir atama ekleyin. Son olarak, etkinleştirilmesini istediğiniz kullanıcı alanı tablolarını yeniden atayın. (Yeniden oluşturulan hbase:meta tablo, tüm tabloları çevrimdışı olarak ve hiçbir bölge atanmamış olarak oluşturur.)

Ayrıntılı yeniden oluşturma 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 bu acil durum için yordam deposunda atama yordamı olmadığından takıldı. HBase Ana günlüğü bu durumu gösterir. Bu örnekte günlüğe nelerin günlüğe ekli olduğu gösterilir:

    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ı tablo 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 başarısız olur PleaseHoldException . (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 PleaseHoldException Master henüz çalışır durumda olmadığı için öğesini ifade eder.) 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ı? Kendini başlatamazsa Ana Şablon bir süre sonra kapanır. Kümeyi/Master'ı 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 sonunda, atama yordamı zamanlamasının PID'i bulunur. 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. Üstad 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 tabloları kabuk aracılığıyla yeniden kullanılabilir hale getirin. Tek tek yapın veya tüm tabloları aynı anda etkinleştirmek için tüm ".*" komutunu etkinleştirin.

    Meta yeniden derlemede düzenlemeler eksik ve bu makalede daha önce özetlenen tesis kullanılarak 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 hatalı 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, Master'ın perişan olması ve tüm onarım girişimlerinin yalnızca tamamlanamayan geri alınamaz kilitleri veya yordamları açması veya küme sınırları MasterProcWALs 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 gelir.

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

Nelerin hbase:meta info:state atanması veya atanması gerektiğ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 atama veya atamayı kaldırabilirsiniz.