Repository: hbase
Updated Branches:
  refs/heads/branch-1 d0a2a0b14 -> 8ee4464ef


HBASE-12892 Add a class to allow taking a snapshot from the command line


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/8ee4464e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8ee4464e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8ee4464e

Branch: refs/heads/branch-1
Commit: 8ee4464ef9139c8f04f1789fcdf9447cc85569ac
Parents: d0a2a0b
Author: Elliott Clark <ecl...@apache.org>
Authored: Wed Jan 21 13:49:14 2015 -0800
Committer: Enis Soztutar <e...@apache.org>
Committed: Sun Jan 25 17:22:41 2015 -0800

----------------------------------------------------------------------
 bin/hbase                                       |  3 +
 .../hadoop/hbase/snapshot/CreateSnapshot.java   | 86 ++++++++++++++++++++
 2 files changed, 89 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/8ee4464e/bin/hbase
----------------------------------------------------------------------
diff --git a/bin/hbase b/bin/hbase
index 31fd232..8713837 100755
--- a/bin/hbase
+++ b/bin/hbase
@@ -83,6 +83,7 @@ if [ $# = 0 ]; then
   echo "Some commands take arguments. Pass no args or -h for usage."
   echo "  shell           Run the HBase shell"
   echo "  hbck            Run the hbase 'fsck' tool"
+  echo "  snapshot        Create a new snapshot of a table"
   echo "  wal             Write-ahead-log analyzer"
   echo "  hfile           Store file analyzer"
   echo "  zkcli           Run the ZooKeeper shell"
@@ -302,6 +303,8 @@ elif [ "$COMMAND" = "zkcli" ] ; then
   CLASS="org.apache.hadoop.hbase.zookeeper.ZooKeeperMainServer"
 elif [ "$COMMAND" = "upgrade" ] ; then
   CLASS="org.apache.hadoop.hbase.migration.UpgradeTo96"
+elif [ "$COMMAND" = "snapshot" ] ; then
+  CLASS="org.apache.hadoop.hbase.snapshot.CreateSnapshot"
 elif [ "$COMMAND" = "master" ] ; then
   CLASS='org.apache.hadoop.hbase.master.HMaster'
   if [ "$1" != "stop" ] && [ "$1" != "clear" ] ; then

http://git-wip-us.apache.org/repos/asf/hbase/blob/8ee4464e/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
new file mode 100644
index 0000000..06b6017
--- /dev/null
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/CreateSnapshot.java
@@ -0,0 +1,86 @@
+/**
+ *
+ * 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.hbase.snapshot;
+
+import org.apache.commons.cli.CommandLine;
+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.ConnectionFactory;
+import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
+import org.apache.hadoop.hbase.util.AbstractHBaseTool;
+import java.util.Arrays;
+
+
+/**
+ * This is a command line class that will snapshot a given table.
+ */
+public class CreateSnapshot extends AbstractHBaseTool {
+    private String tableName = null;
+    private String snapshotName = null;
+    private String snapshotType = null;
+
+    public static void main(String[] args) {
+        new CreateSnapshot().doStaticMain(args);
+    }
+
+    @Override
+    protected void addOptions() {
+        this.addRequiredOptWithArg("t", "table", "The name of the table");
+        this.addRequiredOptWithArg("n", "name", "The name of the created 
snapshot");
+        this.addOptWithArg("s", "snapshot_type",
+                "Snapshot Type. FLUSH is default. Posible values are "
+                + 
Arrays.toString(HBaseProtos.SnapshotDescription.Type.values()));
+    }
+
+    @Override
+    protected void processOptions(CommandLine cmd) {
+        this.tableName = cmd.getOptionValue('t');
+        this.snapshotName = cmd.getOptionValue('n');
+        this.snapshotType = cmd.getOptionValue('s');
+
+    }
+
+    @Override
+    protected int doWork() throws Exception {
+        Connection connection = null;
+        Admin admin = null;
+        try {
+            connection = ConnectionFactory.createConnection(getConf());
+            admin = connection.getAdmin();
+            HBaseProtos.SnapshotDescription.Type type = 
HBaseProtos.SnapshotDescription.Type.FLUSH;
+            if (snapshotType != null) {
+                type = 
HBaseProtos.SnapshotDescription.Type.valueOf(snapshotName.toUpperCase());
+            }
+
+            admin.snapshot(snapshotName, TableName.valueOf(tableName), type);
+        } catch (Exception e) {
+            return -1;
+        } finally {
+            if (admin != null) {
+                admin.close();
+            }
+            if (connection != null) {
+                connection.close();
+            }
+        }
+        return 0;
+    }
+
+}

Reply via email to