hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Demai Ni (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-8663) a HBase Shell command to list the tables replicated (from or to) current cluster
Date Tue, 30 Jul 2013 17:01:52 GMT

    [ https://issues.apache.org/jira/browse/HBASE-8663?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13724057#comment-13724057
] 

Demai Ni commented on HBASE-8663:
---------------------------------

[~ctrezzo]  thanks for the suggestions. Although the replicationMaster attribute is very useful,
you are right that it is quite tricky on both of the points: 1) multiple Masters 2) and synchronous
call across clusters. 
the first one, can be addressed by change the attribute as an array(and I have another idea
about leveraging the existing replication_scope...)
the 2nd one is harder.  As of today, even the replication setup is done manually instead of
synchronous call without validation. For example 1) the add_peer command won't check whether
peer ZK quorum value, 2) that Users has to manually create the table(with same schema) on
the slaver cluster. Considering many replication values are setup manually and not validated,
maybe we are not ready for a synchronous call(for DDL operations) across clusters. Instead,
a healthy check tool is more realistic? 

With that, I am considering your suggestion to reduce the scope of this jira to list the tables
replicated from current cluster, for now only use 'global' for target-cluster, but can be
easily extended when we support none-global replication. The command will be look like
{code}
hbase(main):001:0> list_replicated_tables
 TABLE      COLUMNFAMILY       TARGET_CLUSTER
 scores      course            MASTER: global
 t3_dn       cf1               MASTER: global
 usertable   family            MASTER: global
{code}
 
                
> a HBase Shell command to list the tables replicated (from or to) current cluster
> --------------------------------------------------------------------------------
>
>                 Key: HBASE-8663
>                 URL: https://issues.apache.org/jira/browse/HBASE-8663
>             Project: HBase
>          Issue Type: New Feature
>          Components: Replication, shell
>         Environment: clusters setup as Master and Slave for replication of tables 
>            Reporter: Demai Ni
>            Assignee: Demai Ni
>            Priority: Critical
>         Attachments: HBASE-8663.PATCH, HBASE-8663-trunk-v0.patch, HBASE-8663-v2.PATCH
>
>
> This jira is to provide a hbase shell command which can give user can overview of the
tables/columnfamilies currently being replicated. The information will help system administrator
for design and planning, and also help application programmer to know which tables/columns
should be watchout(for example, not to modify a replicated columnfamily on the slave cluster)
> Currently there is no easy way to tell which table(s)/columnfamily(ies) 
> replicated from or to a particular cluster. 
> 	
> On Master Cluster, an indirect method can be used by combining two steps: 1) $describe
'usertable'  and 2)  $list_peers to map the REPLICATION_SCOPE to target(aka slave) cluster
  
> 	
> On slave cluster, this is no existing API/methods to list all the tables replicated to
this cluster.    
> Here is an example, and prototype for Master cluster
> {code: title=hbase shell command:list_replicated_tables |borderStyle=solid}
> hbase(main):001:0> list_replicated_tables
>  TABLE      COLUMNFAMILY       TARGET_CLUSTER
>  scores      course            hdtest017.svl.ibm.com:2181:/hbase
>  t3_dn       cf1               hdtest017.svl.ibm.com:2181:/hbase
>  usertable   family            hdtest017.svl.ibm.com:2181:/hbase
> 3 row(s) in 0.3380 seconds
> {code}
> {code: title=method to return all columnfamilies replicated from this cluster |borderStyle=solid}
> /** 
>  * ReplicationAdmin.listRepllicated
>    * @return List of the replicated columnfamilies of this cluster for display. 
>    * @throws IOException 
> */
> public List<String[]> listReplicated() throws IOException {
>     List<String[]> replicatedColFams = new ArrayList<String[]>();  
>     
>     HTableDescriptor[] tables;
>     
>     tables= this.connection.listTables();
>     
>     Map<String, String> peers = listPeers();
>     
>     for (HTableDescriptor table:tables) {
>       HColumnDescriptor[] columns = table.getColumnFamilies();
>       String tableName = table.getNameAsString();
>       for (HColumnDescriptor column: columns) {
>         int scope = column.getScope();
>                 
>         if (scope!=0) {
>           String[] replicatedEntry = new String[3]; 
>           replicatedEntry[0] = tableName;
>           replicatedEntry[1] = column.getNameAsString();
>           replicatedEntry[2] = peers.get(Integer.toString(scope));
>           replicatedColFams.add(replicatedEntry);
>         }
>       }
>     }
>     
>     return replicatedColFams;
>   }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message