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 CatalogJanitor
için hbase kabuğunda komutunu yürütür: catalogjanitor_run
.
komutunu çalıştırmak hbck chore
iç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:meta
olarak 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_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 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ı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, 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: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 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
n1
ad alanında ve ad 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 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 ns1
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 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: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 HBCK Report
yeni bir sekmesi ve yeni hbck chore
bir sekmesi vardır.
Başka onarımlar yapmadan önce sağlıklı hale getirmeniz çok önemlidirhbase:meta
. ve overlaps
düzeltmeleriholes
, hdfs'de eklenen bölgeleri eşleştirmek için (boş) bölge hbase:meta
dizinleri 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
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 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ğ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 olup olmadığını --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>
. Ö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:meta
olduğ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 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 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 RegionServers
iç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:meta
yaptığı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: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 bölgeler olarak hbase:meta
okunur. 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 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ü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 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öyledir725a0fe6c2c869d3d0a9ed82bfa80fa3
. Ana sürüm denetimini atlamak için komutunu geçirmeniz-skip
gerekir. (Bu olmadan, HBCK2 çağrınızPleaseHoldException
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 refused
geri 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 MasterProcWALs
taşıyarak varlıkların hiçbiri kilitlenmemelidir, bu nedenle toplu atama veya atamayı kaldırabilirsiniz.