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:meta
olarak 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_1
table_2
iç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 ns1
iç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ınhbase:meta
bir veya daha fazla giriş dosyasını alır. Çevrimiçi olması gerekiyorhbase: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:meta
belirli 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 n1
alanından tüm tablolar n2
iç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 ns1
alanı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:meta
yapı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 chore
bir 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:meta
dizinleri 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
ColumnFamilyDescriptors
hem deTableDescriptor
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ğinServerCrashProcedures
, 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 --fix
temizlemek 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:meta
olduğ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 split
gibi 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 RegionServers
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
öğ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:meta
yaptığı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:meta
meta 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:meta
gider. 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 n1
alanından tüm tablolar tbl_1
için eksik bölgelerin n2
eklenmesi 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ünhbase: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öyledir725a0fe6c2c869d3d0a9ed82bfa80fa3
. 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 zorlarPleaseHoldException
.) 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 refused
geri 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:meta
info:state
atanması veya atanması gerekmediğini belirlemek için sütunları açıklandığı gibi okuyun. tüm geçmiş silindikten sonra öğesini bir kenara MasterProcWALs
taşıyarak varlıkların hiçbiri kilitlenmemelidir, bu nedenle toplu olarak atayabilir veya atamasını kaldırabilirsiniz.