基于JAVA API编程接口的HBase Shell交互式命令行终端模拟程序(简要实现)

一、环境搭建

集群规划:

Master:192.168.76.11

Slave1:192.168.76.12

Slave2:192.168.76.13

操作系统:RedHat Linux7

对三台虚拟机进行,修改主机名,配置域名映射,关闭防火墙,配置免密登录操作,上传安装包,创建安装目录操作。本项目选择配置Hadoop完全分布式、Zookeeper集群模式和HBase完全分布式。

  1. Hadoop集群部署(仅在master执行)

安装jdk

解压jdk-1.8的压缩包到安装目录

配置全局环境变量(vim /etc/profile)

#jdk

export JAVA_HOME=/lx/bigdata/jdk

export PATH=$PATH:$JAVA_HOME/bin

将jdk安装目录分发给另外两台虚拟机,然后刷新环境变量

安装hadoop

解压hadoop-2.7.1压缩包到安装目录

去到安装目录下的/etc/Hadoop,修改core-site.xml、hadoop-env.sh、hdfs-  site.xml、mapred-site.xml、yarn-site.xml、yarn-env.sh、slaves

core-site.xml

<configuration>

 <property>

 <name>fs.defaultFS</name>

 <value>hdfs://master:8020</value>

 </property>

 <property>

 <name>hadoop.tmp.dir</name>

 <value>/var/log/hadoop/tmp</value>

 </property>

</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/jdk

hdfs-site.xml

<configuration>

<property>

 <name>dfs.namenode.name.dir</name>

 <value>file:///data/hadoop/hdfs/name</value>

</property>

<property>

 <name>dfs.datanode.data.dir</name>

 <value>file:///data/hadoop/hdfs/data</value>

</property>

<property>

 <name>dfs.namenode.secondary.http-address</name>

 <value>master:50090</value>

</property>

<property>

 <name>dfs.replication</name>

 <value>3</value>

</property>

</configuration>

mapred-site.xml

默认系统中没有这个配置文件,但是有它的模板我们复制一份

cp mapred-site.xml.template mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<!-- jobhistory properties -->

<property>

<name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

</property>

</configuration>

yarn-site.xml

<configuration>

 <property>

 <name>yarn.resourcemanager.hostname</name>

 <value>master</value>

 </property>

 <property>

 <name>yarn.resourcemanager.address</name>

 <value>${yarn.resourcemanager.hostname}:8032</value>

 </property>

 <property>

 <name>yarn.resourcemanager.scheduler.address</name>

 <value>${yarn.resourcemanager.hostname}:8030</value>

 </property>

 <property>

 <name>yarn.resourcemanager.webapp.address</name>

 <value>${yarn.resourcemanager.hostname}:8088</value>

 </property>

 <property>

 <name>yarn.resourcemanager.webapp.https.address</name>

 <value>${yarn.resourcemanager.hostname}:8090</value>

 </property>

 <property>

 <name>yarn.resourcemanager.resource-tracker.address</name>

 <value>${yarn.resourcemanager.hostname}:8031</value>

 </property>

 <property>

 <name>yarn.resourcemanager.admin.address</name>

 <value>${yarn.resourcemanager.hostname}:8033</value>

 </property>

 <property>

 <name>yarn.nodemanager.local-dirs</name>

 <value>/data/hadoop/yarn/local</value>

 </property>

 <property>

 <name>yarn.log-aggregation-enable</name>

 <value>true</value>

 </property>

 <property>

 <name>yarn.nodemanager.remote-app-log-dir</name>

 <value>/data/tmp/logs</value>

 </property>

<property>

<name>yarn.log.server.url</name>

<value>http://master:19888/jobhistory/logs/</value>

<description>URL for job history server</description>

</property>

<property>

 <name>yarn.nodemanager.vmem-check-enabled</name>

 <value>false</value>

 </property>

<property>

 <name>yarn.nodemanager.aux-services</name>

 <value>mapreduce_shuffle</value>

 </property>

 <property>

 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

 <value>org.apache.hadoop.mapred.ShuffleHandler</value>

 </property>

<property>

 <name>yarn.nodemanager.resource.memory-mb</name>

 <value>2048</value>

</property>

<property>

 <name>yarn.scheduler.minimum-allocation-mb</name>

 <value>512</value>

</property>

<property>

 <name>yarn.scheduler.maximum-allocation-mb</name>

 <value>4096</value>

</property>

<property>

 <name>mapreduce.map.memory.mb</name>

 <value>2048</value>

</property>

<property>

 <name>mapreduce.reduce.memory.mb</name>

 <value>2048</value>

</property>

<property>

 <name>yarn.nodemanager.resource.cpu-vcores</name>

 <value>1</value>

</property>

</configuration>

yarn-env.sh

export JAVA_HOME=/usr/jdk

slaves

删除原有内容添加

slave1

slave2

然后vim /etc/profile 写入

#hadoop

export HADOOP_HOME=/lx/bigdata/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

最后将修改的文件分发给slave、slave2,在三台虚拟机上刷新环境变量

格式化namenode

hdfs namenode -format

Zookeper的安装(仅在master操作)

解压zookeeper-3.4到安装目录

修改/etc/profile,写入

#zookeeper

export ZOOKEEPER_HOME=/lx/bigdata/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

进入安装目录下的conf目录

修改zoo.cgf,系统默认也是没有的,所以复制一份

cp zoo_sample.cfg zoo.cfg

zoo.cfg

修改dataDir参数,改为自己使用的目录(默认可以不用修改),在文件末尾加入

server.1=192.168.76.11:2888:3888

server.2=192.168.76.12:2888:3888

server.3=192.168.76.13:2888:3888

然后创建目录(就是dataDir设置的目录)

最后将修改的文件分发给slave、slave2,在三台虚拟机上刷新环境变量

在三台虚拟机上分别进入刚刚创建的目录,执行

Master

echo 1 >  myid

Slave1

echo 2 >  myid

Slave3

echo 3 >  myid

HBase安装(仅在master操作)

将hbase-1.4.13解压到安装目录

进入安装目录下的conf目录,修改配置文件

hbase-site.xml

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://master:8020/hbase</value>

</property>

<property>

<name>hbase.master</name>

<value>master</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2181</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>slave1,slave2</value>

</property>

<property>

<name>zookeeper.session.timeout</name>

<value>60000000</value>

</property>

<property>

<name>dfs.support.append</name>

<value>true</value>

</property>

</configuration>

hbase-env.sh

注释下面两行内容

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

写入以下内容

export HBASE_CLASSPATH=/lx/bigdata/hadoop/etc/hadoop

export JAVA_HOME=/lx/bigdata/jdk

export HBASE_MANAGES_ZK=false

系统默认使用内置zookeeper,改为false意思为使用外置zookeeper

修改/etc/profile,写入

#hbase

export HBASE_HOME=/lx/bigdata/hbase

export PATH=$PATH:$HBASE_HOME/bin

最后将修改的文件分发给slave、slave2,在三台虚拟机上刷新环境变量

最后开启集群

Start-all.sh(只需在master执行)

zkServer.sh start(三台都要执行)

start-hbase.sh(只需在master执行)

查看进程(jps)

Master:

Slave1:

Slave2:

二、代码部分

导入jar包(jar包为hbase安装目录下lib目录的所有jar包)

hbaseutils



import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;

public class hbaseutils {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;

    public static void init() throws IOException  //执行数据库操作之前,把与创建configuration, Connection, Admin相关的代码统一放到静态的初始化方法init()中
    {
        configuration = HBaseConfiguration.create();
        configuration.set("hbase.zookeeper.quorum", "master");
        connection = ConnectionFactory.createConnection(configuration);	//实质得到是Connection接口的间接实现类HConnectionImplementation的一个实例
        admin = connection.getAdmin();//实质得到是Admin接口的直接接实现类HBaseAdmin的一个实例
        System.out.println("Hbase Init Success");
    }

    public static void close() throws IOException
    {
        connection.close();
        admin.close();
    }
    
    
    
    
    //help
    public static void helpinfo() {
    	System.out.println("command"+"\t\t\t"+"sample code");
        System.out.println("list:"+"\t\t\t"+"list");
        System.out.println("exists:"+"\t\t\t"+"exists t1");
        System.out.println("disable:"+"\t\t"+"disable t1");
        System.out.println("desc:"+"\t\t\t"+"desc t1");
        System.out.println("create:"+"\t\t\t"+"create t1 f1");
        System.out.println("alter:"+"\t\t\t"+"alter t1 f1");
        System.out.println("delete:"+"\t\t\t"+"delete t1");
        System.out.println("put:"+"\t\t\t"+"put t1 r1 f1 q1 v1");
        System.out.println("getr:"+"\t\t\t"+"getr t1 r1");
        System.out.println("getc:"+"\t\t\t"+"getc t1 r1 f1 q1");
        System.out.println("scant:"+"\t\t\t"+"scant t1");
        System.out.println("scanf:"+"\t\t\t"+"scanf t1 f1");
        System.out.println("deleter:"+"\t\t"+"deleter t1 r1");
        System.out.println("deletec:"+"\t\t"+"deletec t1 r1 f1 q1");
        System.out.println("listNameSpaces:"+"\t\t"+"listNameSpaces");
        System.out.println("listTables:"+"\t\t"+"listTables namespace");
        System.out.println("createNameSpace:"+"\t"+"createNameSpace namespace");
        System.out.println("help:"+"\t\t\t"+"help");
    }

    
    
    
    
    
    
    //list
    public static void listTables() throws IOException//实现列出所有的表名
    {
        //通过TableName类获取表名
        TableName[] tableNames = admin.listTableNames();
        for(TableName tableName : tableNames)
        {
            System.out.println(new String(tableName.getName()));//把字节数组byte[]转换成String
        }
    }

    
    
    
    
    
    
    //exists
    public static boolean isTableExist(String strTableName) throws IOException//判断表是否存在
    {
        //处理不合法的情况,直接return
        if(!isTableNameFormatCorrect(strTableName))
        {
            return false;
        }

        TableName tableName  = TableName.valueOf(strTableName);
        return admin.tableExists(tableName);
    }
    public static boolean isTableNameFormatCorrect(String strTableName)
    {
//        System.out.println(strTableName.indexOf(":"));
//        System.out.println(strTableName.lastIndexOf(":"));
//        System.out.println(strTableName.length());
        //输入参数的合法性检查,提高方法代码的健壮性
        //包含不只1个冒号||第一个字符是冒号||最后一个字符是冒号
        if(strTableName.indexOf(":") != strTableName.lastIndexOf(":") || //第一个字符是冒号
                strTableName.indexOf(":")==0 || //最后一个字符是冒号
                strTableName.indexOf(":")==strTableName.length()-1)//包含不只1个冒号|
        {
            System.out.println("Input parameter format incorrect");
            return false;
        }
        return true;
    }
    
    
    
    
    
    
    
    
  //desc
    public static void descTable(String strTableName) throws IOException//描述指定表的属性信息
    {
        //处理不合法的情况,直接返回false
        if (!isTableNameFormatCorrect(strTableName)) {
            return;
        }
        if(!isTableExist(strTableName)) //表不允许被删除返回false
		{
			System.out.println("Table dose not exists");
			return ;
		}

        TableName tableName = TableName.valueOf(strTableName);//获取表名对象

        if (admin.isTableEnabled(tableName)) //判断表是否可用
        {
            System.out.println("Table " + strTableName + " is ENABLED");
        } else {
            System.out.println("Table " + strTableName + " is DISABLED");
        }
        HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);
//        System.out.println(strTableName);
        HColumnDescriptor[] hcds = tableDescriptor.getColumnFamilies();
        System.out.println("COLUMN FAMILIES DESCRIPTION");
        for (HColumnDescriptor hcd : hcds) {
            System.out.println("{NAME => " + hcd.getNameAsString() + ", " +
                    "BLOOMFILTER => " + hcd.getBloomFilterType() + ", " +
                    "VERSIONS => " + hcd.getMaxVersions() + ", " +
                    "IN_MEMORY => " + hcd.isInMemory() + ", " +
                    "KEEP_DELETED_CELLS => " + hcd.getKeepDeletedCells() + ", " +
                    "DATA_BLOCK_ENCODING => " + hcd.getDataBlockEncoding().name() + ", " +
                    "TTL => " + hcd.getTimeToLive() + ", " +
                    "COMPRESSION => " + hcd.getCompression().getName() + ", " +
                    "MIN_VERSIONS => " + hcd.getMinVersions() + ", " +
                    "BLOCKCACHE => " + hcd.isBlockCacheEnabled() + ", " +
                    "BLOCKSIZE => " + hcd.getBlocksize() + ", " +
                    "REPLICATION_SCOPE => " + hcd.getDFSReplication() + "}"
            );//获取列族名称
        }
    }
    
    
    
    //create
    public static void createTable(String strTableName, String strColumnFamilyName) throws IOException
	{
    	if(!isTableNameFormatCorrect(strTableName)) //判断表是否允许创建
    	{
    		return;
    	}
    	if(isTableExist(strTableName)) //如果表存在则直接返回
		{
			
			System.out.println("Table " + strTableName + " does exist");
			return;
		}
    	
    	TableName tableName = TableName.valueOf(strTableName);
		HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
		HColumnDescriptor columnDescriptor = new HColumnDescriptor(strColumnFamilyName);
		tableDescriptor.addFamily(columnDescriptor);		
		admin.createTable(tableDescriptor);		
	}
    
    
    
    
    
    
    
    
    //alter
    public static void alterTable(String strTableName, String newColumnFamily) throws IOException
	{    
		if(!isTableExist(strTableName)) //表不存在则返回false
		{
			System.out.println("Table dose not exists");
			return;
		}
	
		TableName tableName = TableName.valueOf(strTableName);//获取表名对象	    	
		HTableDescriptor tableDescriptor = admin.getTableDescriptor(tableName);//获取表的描述器		
		
		if(isColumnFamilyExists(tableDescriptor, newColumnFamily)) //如果表的列族已存在,则直接返回
		{
			return;
		}
		
		HColumnDescriptor columnDescriptor = new HColumnDescriptor(newColumnFamily);//创建一个新的列族描述器			
		tableDescriptor.addFamily(columnDescriptor);//添加新列族描述器到表描述器		
		admin.modifyTable(tableName, tableDescriptor);	//提交修改表的操作
	 }
    
    public static boolean isColumnFamilyExists(HTableDescriptor tableDescriptor, String strFamiliyName) throws IOException//实现列出所有的表名
	{
		HColumnDescriptor[] hColumnDescriptors = tableDescriptor.getColumnFamilies();
		for(HColumnDescriptor hColumnDescriptor: hColumnDescriptors) 
		{
			if(hColumnDescriptor.getNameAsString().equals(strFamiliyName))
			{
//				System.out.println("Column Family already exists");
				return true;
			}
		}
		return false;	
	}
    
    
    
    //delete
    public static void dropTable(String strTableName) throws IOException
   	{
   		if(!isTableAllowDrop(strTableName)) //返回false,表不允许删除
   		{
   			System.out.println("Table dose not allow to be dropped");
   			return;
   		}  	
   		TableName tableName = TableName.valueOf(strTableName);
   		admin.deleteTable(tableName);
   		System.out.println("Table deleted successfully");
   	} 
    public static boolean isTableAllowDrop(String strTableName) throws IOException//判断表是否存在
	{	
		if(!isTableExist(strTableName)) //表不允许被删除返回false
		{
			System.out.println("Table dose not exists");
			return false;
		}	
		TableName tableName = TableName.valueOf(strTableName);
		if(admin.isTableEnabled(tableName)) //判断表是否被禁用,如果是enabled,返回true
		{
			admin.disableTable(tableName);//删除前先将表禁用 ,使其off-line
		}
		return true;
	}
    
    public static void scanTable(String strTableName) throws IOException
   	{	
   		if(!isTableExist(strTableName)) //如果表不存在则直接返回
   		{
   			System.out.println("Table dose not exists");
   			return;
   		}
   		
       	TableName tableName = TableName.valueOf(strTableName); //获取表名对象	
       	Scan scan = new Scan(); //创建扫描器对象   	
       	Table table =  connection.getTable(tableName);//获取操作表的Table对象   	
       	ResultScanner resultScanner = table.getScanner(scan);//获得用于检索数据的ResultScanner对象
       	
       	printScanResult(resultScanner);//输出扫描结果
   	} 
    public static void printScanResult(ResultScanner resultScanner) throws IOException
	{
        for (Result result : resultScanner) 
        { 
//        	System.out.println(result);
        	Cell[] cells = result.rawCells();//返回单元格Cell的数组     	
        	printCellValue(cells);//输出单元格Cell数组的内容
        }
	}
    public static void printCellValue(Cell[] cells) throws IOException//实现列出所有的表名
	{
        for (Cell cell : cells) 
        { 
            System.out.println("rowkey:" + Bytes.toString(CellUtil.cloneRow(cell)) + 
            		         " | column family:" + Bytes.toString(CellUtil.cloneFamily(cell)) + 
            		         " | column:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + 
            		         " | timestamp:" + cell.getTimestamp() +
            		         " | cell value:" + Bytes.toString(CellUtil.cloneValue(cell)));
        }
	}
    
    
    
    //put
    public static void putACellValue(String strTableName, String rowKey, String columnFamily, String column, String value) throws IOException
	{
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
    	
		TableName tableName = TableName.valueOf(strTableName);//获取表名对象 		
		if(!isColumnFamilyExists(admin.getTableDescriptor(tableName), columnFamily)) //如果列族不存在则直接返回
		{
			System.out.println("Column Family does not exists");
			return;
		}
    	
    	Table table = connection.getTable(tableName);//获取操作表的Table对象
    	Put put = new Put(Bytes.toBytes(rowKey));//创建一个Put对象,指定行键rowKey
    	put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));//增加一列,指定列族、列修饰符、单元格值
    	table.put(put);	//执行put方法,插入一列
	}
    
    
    
    
    
    
    //getr
    public static void getCellValue(String strTableName, String rowKey) throws IOException
	{	
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
    	
    	TableName tableName = TableName.valueOf(strTableName); //获取表名对象
    	Table table = connection.getTable(tableName);//获取操作表的Table对象    	
    	Get get = new Get(Bytes.toBytes(rowKey));//创建一个Get对象,指定行键rowKey 	
    	Result result = table.get(get);//执行get方法,获得指定列的指,返回结果
    	Cell[] cells = result.rawCells();//获取单元格对象的数组
    	
    	printCellValue(cells);//输出单元格数组的内容
	}
    
    //getc
    public static void getCellValue(String strTableName, String rowKey, String columnFamily, String column) throws IOException
	{	
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
  	
    	TableName tableName = TableName.valueOf(strTableName); //获取表名对象		
    	if(!isColumnFamilyExists(admin.getTableDescriptor(tableName), columnFamily)) //如果列族不存在则直接返回
		{
			System.out.println("Column Family does not exists");
			return;
		}
    	
    	Table table = connection.getTable(tableName);//获取操作表的Table对象    	
    	Get get = new Get(Bytes.toBytes(rowKey));//创建一个Get对象,指定行键rowKey
    	get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));//加入列族名和列名作为查询条件
    	Result result = table.get(get);//执行get方法,获得指定列的指,返回结果
    	Cell[] cells = result.rawCells();//获取单元格对象的数组
    	
    	printCellValue(cells);//输出单元格数组的内容
	}
   
    
    
    //scant
//    public static void scanTable(String strTableName) throws IOException
//   	{	
//   		if(!isTableExist(strTableName)) //如果表不存在则直接返回
//   		{
//   			System.out.println("Table dose not exists");
//   			return;
//   		}
//   		
//       	TableName tableName = TableName.valueOf(strTableName); //获取表名对象	
//       	Scan scan = new Scan(); //创建扫描器对象   	
//       	Table table =  HBaseJavaAPIUtils.connection.getTable(tableName);//获取操作表的Table对象   	
//       	ResultScanner resultScanner = table.getScanner(scan);//获得用于检索数据的ResultScanner对象
//       	
//       	printScanResult(resultScanner);//输出扫描结果
//   	} 
    
  //scanf
    public static void scanTable(String strTableName, String columnFamily) throws IOException
	{	
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
		
    	TableName tableName = TableName.valueOf(strTableName); //获取表名对象	
    	if(!isColumnFamilyExists(admin.getTableDescriptor(tableName), columnFamily)) //如果列族不存在则直接返回
		{
			System.out.println("Column Family does not exists");
			return;
		}
    	Scan scan = new Scan(); //创建扫描器对象   	
    	scan.addFamily(Bytes.toBytes(columnFamily));//把要扫描的一个列族增加到扫描器中
    	Table table = connection.getTable(tableName);//获取操作表的Table对象   	
    	ResultScanner resultScanner = table.getScanner(scan);//获得用于检索数据的ResultScanner对象
    	
    	printScanResult(resultScanner);//输出扫描结果
	} 
   
    
    
    
    
    
    //deleter
    public static void deleteCellValue(String strTableName, String rowKey) throws IOException
	{
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
    	
		TableName tableName = TableName.valueOf(strTableName); //获取表名对象   	

		Table table = connection.getTable(tableName);//获取操作表的Table对象
    	Delete delete = new Delete(Bytes.toBytes(rowKey));//创建一个Delete对象,指定要删除列的行键rowKey
    	table.delete(delete);//执行delete方法,删除该列
	}
    
    
    
    
    
    
    
   //deletec
    public static void deleteCellValue(String strTableName, String rowKey, String columnFamily, String column) throws IOException
	{
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
    	
		TableName tableName = TableName.valueOf(strTableName); //获取表名对象
    	
		if(!isColumnFamilyExists(admin.getTableDescriptor(tableName), columnFamily)) //如果列族不存在则直接返回
		{
			System.out.println("Column Family does not exists");
			return;
		}
    	
		Table table =connection.getTable(tableName);//获取操作表的Table对象
    	Delete delete = new Delete(Bytes.toBytes(rowKey));//创建一个Delete对象,指定要删除列的行键rowKey
    	delete.addColumns(Bytes.toBytes(columnFamily), Bytes.toBytes(column));//在Delete对象中增加要删除的列,指定列族和列名
    	table.delete(delete);//执行delete方法,删除该列
	}
    
   //listNameSpaces
    public static void listNameSpaces() throws IOException//实现列出所有的表名
	{
		NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();
		for(NamespaceDescriptor namespaceDescriptor: namespaceDescriptors) 
		{
			System.out.println(namespaceDescriptor.getName());//获取名字空间名称的字符串
		}	
	}
  
    
    //查看指定名字空间的表
    public static void listTables(String strNameSpace) throws IOException//实现列出所有的表名
	{	
		//检查名字空间是否存在
		if(!isNameSpacesExists(strNameSpace)) //不存在则直接返回
		{
			return;
		}
				
		TableName[] tableNames = admin.listTableNamesByNamespace(strNameSpace);		
		listTables(tableNames);
	}
    public static boolean isNameSpacesExists(String strNameSpace) throws IOException//实现列出所有的表名
	{
		NamespaceDescriptor[] namespaceDescriptors = admin.listNamespaceDescriptors();
		for(NamespaceDescriptor namespaceDescriptor: namespaceDescriptors) 
		{
			if(namespaceDescriptor.getName().equals(strNameSpace))//判断名字空间名称的字符串是否相等
			{
				return true;
			}
		}
//		System.out.println("NameSpace does not exists");
		return false;
	}
    public static void listTables(TableName[] tableNames) throws IOException//实现列出所有的表名
	{	
		 for(TableName tableName : tableNames)
		 {	
			 System.out.println(tableName.getNameAsString());
		 }
	}	
    
    //createNameSpace
    public static void createNameSpace(String strNameSpace) throws IOException//实现列出所有的表名
	{
		if(isNameSpacesExists(strNameSpace))//如果名字空间存在
		{
			System.out.println("NameSpace already exists");
			return;
		}
		
//		NamespaceDescriptor namespaceDescriptor = new NamespaceDescriptor();//构造方法是私有的,不能直接调用
		NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(strNameSpace).build();
		admin.createNamespace(namespaceDescriptor);
	}

	public static void disable(String strTableName) throws IOException {
		if(!isTableExist(strTableName)) //如果表不存在则直接返回
		{
			System.out.println("Table dose not exists");
			return;
		}
		TableName tableName = TableName.valueOf(strTableName);
		
		if(admin.isTableEnabled(tableName)) //判断表是否被禁用,如果是enabled,返回true
		{
			admin.disableTable(tableName);//删除前先将表禁用 ,使其off-line
		}
		return ;
		
	}
    
}

 hbaseshell


import java.io.IOException;
import java.util.Scanner;

public class hbaseshell {
    public static void main(String[] args) throws IOException {

        hbaseutils.init();//执行数据库操作之前,先 初始化,生成配置,建立连接
        String input = "";
        String[] param = {};
        
        while (true) {
            System.out.print("HbaseShell>");
            Scanner scan = new Scanner(System.in);
            input = scan.nextLine();//获取终端的下一行输入,nextLine()回车结束,不会以空格结束
            String tmp="";
            if(input.length()>0) {
            	tmp+=input.charAt(0);
            }
            
          //将各参数之间的多个空格去除,仅保留一个空格
    		for(int i=1;i<input.length();i++) {
    			if(input.charAt(i-1)==' '&&input.charAt(i)==' ') {
    				continue;
    			}
    			tmp+=input.charAt(i);
    		}
    		
            input = tmp.trim();//去掉首尾空格字符
            param = input.split(" ");//对输入按空格分隔,返回字符串列表
          
            if (param.length < 1) {//没有任何输出则跳过
                continue;
            }
   
            switch (param[0]) {
            
                case "help":
                    doCmd(param, 1);
                    break;
                case "list":
                    doCmd(param, 1);
                    break;
                case "exists":
                    doCmd(param, 2);
                    break;
                case "desc":
                    doCmd(param, 2);
                    break;
                case "create":
                    doCmd(param, 3);
                    break;
                case "alter":
                    doCmd(param, 3);
                    break;
                case "delete":
                    doCmd(param, 2);
                    break;
                case "put":
                    doCmd(param, 6);
                    break;
                case "getr":
                    doCmd(param, 3);
                    break;
                case "getc":
                    doCmd(param, 5);
                    break;
                case "scant":
                    doCmd(param, 2);
                    break;
                case "scanf":
                    doCmd(param, 3);
                    break;
                case "deleter":
                    doCmd(param, 3);
                    break;
                case "deletec":
                    doCmd(param, 5);
                    break;
                case "listTables":
                    doCmd(param,2);
                    break;
                case "disable":
                    doCmd(param,2);
                    break;    
                case "listNameSpaces":
                    doCmd(param, 1);
                    break;
                case "createNameSpace":
                    doCmd(param, 2);
                    break;
                case "quit":
                    hbaseutils.close();//执行数据库操作之后,关闭连接,释放资源
                    return;
                case "":
                    break;
                default:
                    System.out.println("invalid command");
            }
        }
    }

    //根据终端输入的不同参数,执行不同的命令
    static void doCmd(String[] param, int len) throws IOException {
        if (param.length == len && len == 1) {
            if (param[0].equals("help")) {
            	hbaseutils.helpinfo();//显示帮助信息
            }
            if (param[0].equals("listNameSpaces")) {
            	hbaseutils.listNameSpaces();//显示帮助信息
            }
            if (param[0].equals("list")) {
                hbaseutils.listTables();//列出默认名字空间default的所有表名
            }
        } else if (param.length == len && len == 2) {
            
            if (param[0].equals("exists")) {
                if (hbaseutils.isTableExist(param[1])) {
                    System.out.println("Table " + param[1] + " does exist");
                } else {
                    System.out.println("Table " + param[1] + " does not exist");
                }
            }
            if (param[0].equals("desc")) {
                hbaseutils.descTable(param[1]);
            }
            if (param[0].equals("listTables")) {
                hbaseutils.listTables(param[1]);
            }
            if (param[0].equals("disable")) {
                hbaseutils.disable(param[1]);
            }
            if (param[0].equals("createNameSpace")) {
                hbaseutils.createNameSpace(param[1]);
            }
            if (param[0].equals("scant")) {
                hbaseutils.scanTable(param[1]);
            }
            if(param[0].equals("delete")) {
            	hbaseutils.dropTable(param[1]);
            }
        } else if (param.length == len && len == 3) {
        	 if (param[0].equals("create")) {
        		 hbaseutils.createTable(param[1], param[2]);
        	 }
        	 if(param[0].equals("alter")) {
        		 hbaseutils.alterTable(param[1], param[2]);
        	 }
        	 if (param[0].equals("scanf")) {
                 hbaseutils.scanTable(param[1],param[2]);
             }
        	 if(param[0].equals("deleter")) {
             	hbaseutils.deleteCellValue(param[1], param[2]);
             }
        	 if(param[0].equals("getr")) {
             	hbaseutils.getCellValue(param[1], param[2]);
             }
        } else if (param.length == len && len == 4) {
        	
        } else if (param.length == len && len == 5) {
        	if(param[0].equals("getc")) {
            	hbaseutils.getCellValue(param[1], param[2], param[3], param[4]);
            }
        	if(param[0].equals("deletec")) {
            	hbaseutils.deleteCellValue(param[1], param[2], param[3], param[4]);
            }
        } else if (param.length == len && len == 6) {
        	if(param[0].equals("put")) {
            	hbaseutils.putACellValue(param[1], param[2], param[3], param[4], param[5]);
            }
        } else {
            System.out.println("invalid format");
        }
    }

    
}

用一个命令来展示一下效果

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟爱陈奕迅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值