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; + } + +}