You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ga...@apache.org on 2017/08/04 21:14:30 UTC
[09/17] hive git commit: HIVE-17234 Remove HBase metastore from
master (Alan Gates, reviewed by Daniel Dai and Sergey Shelukhin)
http://git-wip-us.apache.org/repos/asf/hive/blob/5e061557/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseSchemaTool.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseSchemaTool.java b/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseSchemaTool.java
deleted file mode 100644
index b4f8734..0000000
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseSchemaTool.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.hadoop.hive.metastore.hbase;
-
-import com.google.common.annotations.VisibleForTesting;
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.OptionBuilder;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.hadoop.conf.Configuration;
-
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A tool to dump contents from the HBase store in a human readable form
- */
-public class HBaseSchemaTool {
-
- public static void main(String[] args) {
- Options options = new Options();
-
- options.addOption(OptionBuilder
- .withLongOpt("help")
- .withDescription("You're looking at it")
- .create('h'));
-
- options.addOption(OptionBuilder
- .withLongOpt("install")
- .withDescription("Install the schema onto an HBase cluster.")
- .create('i'));
-
- options.addOption(OptionBuilder
- .withLongOpt("key")
- .withDescription("Key to scan with. This should be an exact key (not a regular expression")
- .hasArg()
- .create('k'));
-
- options.addOption(OptionBuilder
- .withLongOpt("list-tables")
- .withDescription("List tables in HBase metastore")
- .create('l'));
-
- options.addOption(OptionBuilder
- .withLongOpt("regex-key")
- .withDescription("Regular expression to scan keys with.")
- .hasArg()
- .create('r'));
-
- options.addOption(OptionBuilder
- .withLongOpt("table")
- .withDescription("HBase metastore table to scan")
- .hasArg()
- .create('t'));
-
- CommandLine cli = null;
- try {
- cli = new GnuParser().parse(options, args);
- } catch (ParseException e) {
- System.err.println("Parse Exception: " + e.getMessage());
- usage(options);
- return;
- }
-
- if (cli.hasOption('h')) {
- usage(options);
- return;
- }
-
- Configuration conf = new Configuration();
-
- if (cli.hasOption('i')) {
- new HBaseSchemaTool().install(conf, System.err);
- return;
- }
-
- String key = null;
- if (cli.hasOption('k')) key = cli.getOptionValue('k');
- String regex = null;
- if (cli.hasOption('r')) regex = cli.getOptionValue('r');
- if (key != null && regex != null) {
- usage(options);
- return;
- }
- if (key == null && regex == null) regex = ".*";
-
- // I do this in the object rather than in the static main so that it's easier to test.
- new HBaseSchemaTool().go(cli.hasOption('l'), cli.getOptionValue('t'), key, regex, conf,
- System.out, System.err);
- }
-
- private static void usage(Options options) {
- HelpFormatter formatter = new HelpFormatter();
- String header = "This tool dumps contents of your hbase metastore. You need to specify\n" +
- "the table to dump. You can optionally specify a regular expression on the key for\n" +
- "the table. Keep in mind that the key is often a compound. For partitions regular\n" +
- "expressions are not used because non-string values are\nstored in binary. Instead for " +
- "partition you can specify as much of the exact prefix as you want. So you can give " +
- "dbname.tablename or dbname.tablename.pval1...";
- String footer = "If neither key or regex is provided a regex of .* will be assumed. You\n" +
- "cannot set both key and regex.";
- formatter.printHelp("hbaseschematool", header, options, footer);
- return;
- }
-
- @VisibleForTesting void go(boolean listTables, String table, String key, String regex,
- Configuration conf, PrintStream out, PrintStream err) {
- List<String> lines = new ArrayList<>();
- if (listTables) {
- lines = Arrays.asList(HBaseReadWrite.tableNames);
- } else {
- // If they've used '.' as a key separator we need to replace it with the separator used by
- // HBaseUtils
- if (key != null) key = key.replace('.', HBaseUtils.KEY_SEPARATOR);
- try {
- HBaseReadWrite.setConf(conf);
- HBaseReadWrite hrw = HBaseReadWrite.getInstance();
- if (table.equalsIgnoreCase(HBaseReadWrite.DB_TABLE)) {
- if (key != null) lines.add(hrw.printDatabase(key));
- else lines.addAll(hrw.printDatabases(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.FUNC_TABLE)) {
- if (key != null) lines.add(hrw.printFunction(key));
- else lines.addAll(hrw.printFunctions(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.GLOBAL_PRIVS_TABLE)) {
- // Ignore whatever they passed, there's always only either one or zero global privileges
- lines.add(hrw.printGlobalPrivs());
- } else if (table.equalsIgnoreCase(HBaseReadWrite.PART_TABLE)) {
- if (key != null) lines.add(hrw.printPartition(key));
- else lines.addAll(hrw.printPartitions(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.USER_TO_ROLE_TABLE)) {
- if (key != null) lines.add(hrw.printRolesForUser(key));
- else lines.addAll(hrw.printRolesForUsers(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.ROLE_TABLE)) {
- if (key != null) lines.add(hrw.printRole(key));
- else lines.addAll(hrw.printRoles(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.TABLE_TABLE)) {
- if (key != null) lines.add(hrw.printTable(key));
- else lines.addAll(hrw.printTables(regex));
- } else if (table.equalsIgnoreCase(HBaseReadWrite.SD_TABLE)) {
- if (key != null) lines.add(hrw.printStorageDescriptor(Base64.decodeBase64(key)));
- else lines.addAll(hrw.printStorageDescriptors());
- } else if (table.equalsIgnoreCase(HBaseReadWrite.SECURITY_TABLE)) {
- // We always print all of security, we don't worry about finding particular entries.
- lines.addAll(hrw.printSecurity());
- } else if (table.equalsIgnoreCase(HBaseReadWrite.SEQUENCES_TABLE)) {
- // We always print all of sequences, we don't worry about finding particular entries.
- lines.addAll(hrw.printSequences());
- } else {
- err.println("Unknown table: " + table);
- return;
- }
- } catch (Exception e) {
- err.println("Caught exception " + e.getClass() + " with message: " + e.getMessage());
- return;
- }
- }
- for (String line : lines) out.println(line);
- }
-
- @VisibleForTesting void install(Configuration conf, PrintStream err) {
- try {
- // We need to set the conf because createTablesIfNotExist will get a thread local version
- // which requires that the configuration object be set.
- HBaseReadWrite.setConf(conf);
- HBaseReadWrite.createTablesIfNotExist();
- } catch (Exception e) {
- err.println("Caught exception " + e.getClass() + " with message: " + e.getMessage());
- return;
- }
- }
-}