Skip to content

Instantly share code, notes, and snippets.

@dvimont
Created July 16, 2016 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dvimont/201081eef3316a1a1d4d83d571328010 to your computer and use it in GitHub Desktop.
Save dvimont/201081eef3316a1a1d4d83d571328010 to your computer and use it in GitHub Desktop.
package org.commonvox.hbase_column_manager_gist;
import java.io.File;
import java.io.IOException;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.NamespaceNotFoundException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import org.commonvox.hbase_column_manager.ChangeEventMonitor;
import org.commonvox.hbase_column_manager.MConnectionFactory;
import org.commonvox.hbase_column_manager.RepositoryAdmin;
/**
* THIS GIST DEMONSTRATES BASIC USAGE OF THE ColumnManagerForHBase API FOR
* (1) REPORTING ON COLUMN QUALIFIERS
* (2) EXPORTING HBASE SCHEMA, and
* (3) EXPORTING AN AUDIT-TRAIL OF SCHEMA CHANGES ("change events")
*
* Successful running of this application requires access to an active instance
* of HBase. For install instructions for a standalone instance of HBase, please
* refer to:
* https://hbase.apache.org/book.html#quickstart
*
* For all available versions of hbase-column-manager, please consult Maven Central Repository:
* http://bit.ly/ColumnManagerMaven
*
* FULL INSTRUCTIONS for installation and activation of ColumnManager for HBase available here:
* http://bit.ly/ColumnManagerJavadocs
*
*/
public final class ColumnManagerForHBaseGist {
protected static final String MY_NAMESPACE_NAME = "myTestNamespace";
static final TableName MY_TABLE_NAME = TableName.valueOf(MY_NAMESPACE_NAME, "myTestTable");
static final byte[] MY_COLUMN_FAMILY_NAME = Bytes.toBytes("cf");
static final byte[] MY_FIRST_COLUMN_QUALIFIER = Bytes.toBytes("myFirstColumn");
static final byte[] MY_SECOND_COLUMN_QUALIFIER = Bytes.toBytes("mySecondColumn");
static final byte[] MY_ROW_ID01 = Bytes.toBytes("rowId01");
static final byte[] MY_ROW_ID02 = Bytes.toBytes("rowId02");
public static void main(final String[] args) throws Exception {
try (Connection connection = MConnectionFactory.createConnection();
Admin admin = connection.getAdmin()) {
// use standard hbase-client API to create namepace/table & add rows
if (!namespaceExists(admin, MY_NAMESPACE_NAME)) {
admin.createNamespace(NamespaceDescriptor
.create(MY_NAMESPACE_NAME).build());
}
if (!admin.tableExists(MY_TABLE_NAME)) {
admin.createTable(new HTableDescriptor(MY_TABLE_NAME)
.addFamily(new HColumnDescriptor(MY_COLUMN_FAMILY_NAME)));
}
try (Table table = connection.getTable(MY_TABLE_NAME)) {
table.put(new Put(MY_ROW_ID01)
.addColumn(MY_COLUMN_FAMILY_NAME, MY_FIRST_COLUMN_QUALIFIER,
Bytes.toBytes("Hello"))
.addColumn(MY_COLUMN_FAMILY_NAME, MY_SECOND_COLUMN_QUALIFIER,
Bytes.toBytes("World!")));
table.put(new Put(MY_ROW_ID02)
.addColumn(MY_COLUMN_FAMILY_NAME, MY_FIRST_COLUMN_QUALIFIER,
Bytes.toBytes("Hello"))
.addColumn(MY_COLUMN_FAMILY_NAME, MY_SECOND_COLUMN_QUALIFIER,
Bytes.toBytes("ColumnManager!")));
}
// INVOKE methods to query the ColumnManager repository
RepositoryAdmin repositoryAdmin = new RepositoryAdmin(connection);
repositoryAdmin.outputReportOnColumnQualifiers(new File("colQualifierReport.csv"), MY_TABLE_NAME);
repositoryAdmin.exportSchema(new File("exportedHBaseSchema.xml"), MY_NAMESPACE_NAME);
ChangeEventMonitor changeEventMonitor = repositoryAdmin.getChangeEventMonitor();
ChangeEventMonitor.exportChangeEventListToCsvFile(
changeEventMonitor.getAllChangeEvents(), new File("changeEventsReport.csv"));
// use standard hbase-client API to delete table & namespace
admin.disableTable(MY_TABLE_NAME); // Disable a table before deleting it!
admin.deleteTable(MY_TABLE_NAME);
admin.deleteNamespace(MY_NAMESPACE_NAME);
}
}
/**
* Checks to see whether a namespace exists.
*
* @param admin Standard Admin object
* @param namespaceName Name of namespace
* @return true If namespace exists
* @throws IOException If IO problem encountered
*/
static boolean namespaceExists(final Admin admin, final String namespaceName)
throws IOException {
try {
admin.getNamespaceDescriptor(namespaceName);
} catch (NamespaceNotFoundException e) {
return false;
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment