Goal:
This article explains what does the command "enable_table_replication" do internally in Hbase replication by looking into the source code.
It also explains the difference between below 2 commands which are shown on different articles.
hbase shell> enable_table_replication "t1"
vs.
hbase shell> disable 't1'
hbase shell> alter 't1', {NAME => 'column_family_name', REPLICATION_SCOPE => '1'}
hbase shell> enable 't1'
Env:
Hbase 1.1.8
Analysis:
1. Hbase Source code analysis for "enable_table_replication"
a. "enable_table_replication" is a ruby command in hbase shell
Inside hbase-shell/src/main/ruby/shell/commands/enable_table_replication.rb,
it is calling replication_admin.enable_tablerep(table_name).
b. "enable_tablerep"
Inside hbase-shell/src/main/ruby/hbase/replication_admin.rb,
it is calling @replication_admin.enableTableRep(tableName).
c. "enableTableRep"
Inside hbase-client/src/main/java/org/apache/hadoop/hbase/client/replication/ReplicationAdmin.java,
it is calling:
checkAndSyncTableDescToPeers(tableName, splits);
setTableRep(tableName, true);
d. "checkAndSyncTableDescToPeers"
Inside hbase-client/src/main/java/org/apache/hadoop/hbase/client/replication/ReplicationAdmin.java,
it is to Create the same table on peer when not exist, and Throw exception if the table exists on peer cluster but descriptors are not same.
e. "setTableRep"
Inside hbase-client/src/main/java/org/apache/hadoop/hbase/client/replication/ReplicationAdmin.java,
if (isTableRepEnabled(htd) ^ isRepEnabled) {
boolean isOnlineSchemaUpdateEnabled =
this.connection.getConfiguration()
.getBoolean("hbase.online.schema.update.enable", true);
if (!isOnlineSchemaUpdateEnabled) {
admin.disableTable(tableName);
}
for (HColumnDescriptor hcd : htd.getFamilies()) {
hcd.setScope(isRepEnabled ? HConstants.REPLICATION_SCOPE_GLOBAL
: HConstants.REPLICATION_SCOPE_LOCAL);
}
admin.modifyTable(tableName, htd);
if (!isOnlineSchemaUpdateEnabled) {
admin.enableTable(tableName);
}Basically it checks the value of hbase.online.schema.update.enable(default=true).
If hbase.online.schema.update.enable=true, it modify the REPLICATION_SCOPE for ALL column families to true.
Else, it will firstly disable table, modify REPLICATION_SCOPE for ALL column families to true, and then enable table.
2. Differences
Based on above analysis, "enable_table_replication" can help create the table in target peer if not exist and detect differences on table if exist.
It can modify the REPLICATION_SCOPE for ALL column families.
It checks if hbase.online.schema.update.enable=true, and then decides if disable/enable table is needed.
3F342D3285
ReplyDeletehacker kiralama
hacker arıyorum
tütün dünyası
hacker bul
hacker kirala
AEC15891
ReplyDeletekonya esçort numaraları
nizip esçort
esçort bayan antep
kapaklı esçort
esçort bayan kilis
edirne esçort
esçort konya
derince esçort
ordu esçort