You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by "Mesika, Asaf" <as...@gmail.com> on 2012/12/09 21:34:45 UTC
Using HBaseAdmin.getAlterStatus
Hi,
I've tried using HBaseAdmin.getAlterStatus to check on a HBaseAdmin.modifyTable command I've issued, but it doesn't work.
Sample Code:
Modifying Table
tableDescriptor = admin.getTableDescriptor(tableNameBytes);
if (tableDescriptor.hasCoprocessor(observerClassname)) {
logger.info("Coprocessor installed already. Removing to update jar location in any case");
tableDescriptor.removeCoprocessor(observerClassname);
}
tableDescriptor.addCoprocessor(observerClassname, hdfsJarPath, RegionObserver.PRIORITY_USER, null);
logger.info("Disabling table "+tableName);
admin.disableTable(tableNameBytes);
logger.info("Modifying table "+tableName);
admin.modifyTable(Bytes.toBytes(tableName), tableDescriptor);
logger.info("Enabling table "+tableName);
admin.enableTable(tableNameBytes);
Using alterStatus
byte[] tableName = it.next();
try {
Pair<Integer,Integer> alterStatus = admin.getAlterStatus(tableName);
if (alterStatus.getFirst() == alterStatus.getSecond()) {
it.remove();
logger.info("Table "+Bytes.toString(tableName)+" was altered successfully. "+notLoadedTables.size()+" tables remaining...");
} else {
if (logger.isDebugEnabled()) {
logger.debug("Table "+Bytes.toString(tableName)+" was not yet altered. Alter Status: "+
alterStatus.getFirst()+" regions altered, "+alterStatus.getSecond()+" total regions on table");
}
}
} catch (IOException e) {
throw new RuntimeException("Failed getting alter status for table name: "+Bytes.toString(tableName));
}
Does anyone know how to use it?
Asaf
Re: Using HBaseAdmin.getAlterStatus
Posted by Harsh J <ha...@cloudera.com>.
Yes, checked in-between or monitored in parallel.
On Mon, Dec 10, 2012 at 2:32 AM, Mesika, Asaf <as...@gmail.com> wrote:
> Yeah, I forgot to mention that important bit:
> the pair returned is always 0 on the firstKey and never changes.
>
> So if I understand you correctly, I need to use get AlterStatus between the modifyTable and enableTable ?
>
> On Dec 9, 2012, at 10:53 PM, Harsh J wrote:
>
>> Can you clarify on what "doesn't work" a bit more?
>>
>> Do you get an exception or are you not receiving some data that you
>> are expecting?
>>
>> AFAICT, this API is helpful for a parallel monitoring of an issued
>> schema update. In your code bits, which I will assume is serial, you
>> already disable-update-enable table and complete the alter transaction
>> before querying it (such that there isn't any pending operation to
>> report). If the querying is done in a parallel process/monitor thread,
>> then you may see in-flight results.
>>
>> On Mon, Dec 10, 2012 at 2:04 AM, Mesika, Asaf <as...@gmail.com> wrote:
>>> Hi,
>>>
>>> I've tried using HBaseAdmin.getAlterStatus to check on a HBaseAdmin.modifyTable command I've issued, but it doesn't work.
>>>
>>> Sample Code:
>>>
>>> Modifying Table
>>> tableDescriptor = admin.getTableDescriptor(tableNameBytes);
>>> if (tableDescriptor.hasCoprocessor(observerClassname)) {
>>> logger.info("Coprocessor installed already. Removing to update jar location in any case");
>>> tableDescriptor.removeCoprocessor(observerClassname);
>>> }
>>> tableDescriptor.addCoprocessor(observerClassname, hdfsJarPath, RegionObserver.PRIORITY_USER, null);
>>>
>>> logger.info("Disabling table "+tableName);
>>> admin.disableTable(tableNameBytes);
>>> logger.info("Modifying table "+tableName);
>>> admin.modifyTable(Bytes.toBytes(tableName), tableDescriptor);
>>> logger.info("Enabling table "+tableName);
>>> admin.enableTable(tableNameBytes);
>>>
>>> Using alterStatus
>>> byte[] tableName = it.next();
>>> try {
>>> Pair<Integer,Integer> alterStatus = admin.getAlterStatus(tableName);
>>> if (alterStatus.getFirst() == alterStatus.getSecond()) {
>>> it.remove();
>>> logger.info("Table "+Bytes.toString(tableName)+" was altered successfully. "+notLoadedTables.size()+" tables remaining...");
>>> } else {
>>> if (logger.isDebugEnabled()) {
>>> logger.debug("Table "+Bytes.toString(tableName)+" was not yet altered. Alter Status: "+
>>> alterStatus.getFirst()+" regions altered, "+alterStatus.getSecond()+" total regions on table");
>>> }
>>> }
>>> } catch (IOException e) {
>>> throw new RuntimeException("Failed getting alter status for table name: "+Bytes.toString(tableName));
>>> }
>>>
>>> Does anyone know how to use it?
>>>
>>> Asaf
>>>
>>
>>
>>
>> --
>> Harsh J
>
--
Harsh J
Re: Using HBaseAdmin.getAlterStatus
Posted by "Mesika, Asaf" <as...@gmail.com>.
Yeah, I forgot to mention that important bit:
the pair returned is always 0 on the firstKey and never changes.
So if I understand you correctly, I need to use get AlterStatus between the modifyTable and enableTable ?
On Dec 9, 2012, at 10:53 PM, Harsh J wrote:
> Can you clarify on what "doesn't work" a bit more?
>
> Do you get an exception or are you not receiving some data that you
> are expecting?
>
> AFAICT, this API is helpful for a parallel monitoring of an issued
> schema update. In your code bits, which I will assume is serial, you
> already disable-update-enable table and complete the alter transaction
> before querying it (such that there isn't any pending operation to
> report). If the querying is done in a parallel process/monitor thread,
> then you may see in-flight results.
>
> On Mon, Dec 10, 2012 at 2:04 AM, Mesika, Asaf <as...@gmail.com> wrote:
>> Hi,
>>
>> I've tried using HBaseAdmin.getAlterStatus to check on a HBaseAdmin.modifyTable command I've issued, but it doesn't work.
>>
>> Sample Code:
>>
>> Modifying Table
>> tableDescriptor = admin.getTableDescriptor(tableNameBytes);
>> if (tableDescriptor.hasCoprocessor(observerClassname)) {
>> logger.info("Coprocessor installed already. Removing to update jar location in any case");
>> tableDescriptor.removeCoprocessor(observerClassname);
>> }
>> tableDescriptor.addCoprocessor(observerClassname, hdfsJarPath, RegionObserver.PRIORITY_USER, null);
>>
>> logger.info("Disabling table "+tableName);
>> admin.disableTable(tableNameBytes);
>> logger.info("Modifying table "+tableName);
>> admin.modifyTable(Bytes.toBytes(tableName), tableDescriptor);
>> logger.info("Enabling table "+tableName);
>> admin.enableTable(tableNameBytes);
>>
>> Using alterStatus
>> byte[] tableName = it.next();
>> try {
>> Pair<Integer,Integer> alterStatus = admin.getAlterStatus(tableName);
>> if (alterStatus.getFirst() == alterStatus.getSecond()) {
>> it.remove();
>> logger.info("Table "+Bytes.toString(tableName)+" was altered successfully. "+notLoadedTables.size()+" tables remaining...");
>> } else {
>> if (logger.isDebugEnabled()) {
>> logger.debug("Table "+Bytes.toString(tableName)+" was not yet altered. Alter Status: "+
>> alterStatus.getFirst()+" regions altered, "+alterStatus.getSecond()+" total regions on table");
>> }
>> }
>> } catch (IOException e) {
>> throw new RuntimeException("Failed getting alter status for table name: "+Bytes.toString(tableName));
>> }
>>
>> Does anyone know how to use it?
>>
>> Asaf
>>
>
>
>
> --
> Harsh J
Re: Using HBaseAdmin.getAlterStatus
Posted by Harsh J <ha...@cloudera.com>.
Can you clarify on what "doesn't work" a bit more?
Do you get an exception or are you not receiving some data that you
are expecting?
AFAICT, this API is helpful for a parallel monitoring of an issued
schema update. In your code bits, which I will assume is serial, you
already disable-update-enable table and complete the alter transaction
before querying it (such that there isn't any pending operation to
report). If the querying is done in a parallel process/monitor thread,
then you may see in-flight results.
On Mon, Dec 10, 2012 at 2:04 AM, Mesika, Asaf <as...@gmail.com> wrote:
> Hi,
>
> I've tried using HBaseAdmin.getAlterStatus to check on a HBaseAdmin.modifyTable command I've issued, but it doesn't work.
>
> Sample Code:
>
> Modifying Table
> tableDescriptor = admin.getTableDescriptor(tableNameBytes);
> if (tableDescriptor.hasCoprocessor(observerClassname)) {
> logger.info("Coprocessor installed already. Removing to update jar location in any case");
> tableDescriptor.removeCoprocessor(observerClassname);
> }
> tableDescriptor.addCoprocessor(observerClassname, hdfsJarPath, RegionObserver.PRIORITY_USER, null);
>
> logger.info("Disabling table "+tableName);
> admin.disableTable(tableNameBytes);
> logger.info("Modifying table "+tableName);
> admin.modifyTable(Bytes.toBytes(tableName), tableDescriptor);
> logger.info("Enabling table "+tableName);
> admin.enableTable(tableNameBytes);
>
> Using alterStatus
> byte[] tableName = it.next();
> try {
> Pair<Integer,Integer> alterStatus = admin.getAlterStatus(tableName);
> if (alterStatus.getFirst() == alterStatus.getSecond()) {
> it.remove();
> logger.info("Table "+Bytes.toString(tableName)+" was altered successfully. "+notLoadedTables.size()+" tables remaining...");
> } else {
> if (logger.isDebugEnabled()) {
> logger.debug("Table "+Bytes.toString(tableName)+" was not yet altered. Alter Status: "+
> alterStatus.getFirst()+" regions altered, "+alterStatus.getSecond()+" total regions on table");
> }
> }
> } catch (IOException e) {
> throw new RuntimeException("Failed getting alter status for table name: "+Bytes.toString(tableName));
> }
>
> Does anyone know how to use it?
>
> Asaf
>
--
Harsh J