Created
July 16, 2016 04:07
-
-
Save dvimont/201081eef3316a1a1d4d83d571328010 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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