package cn.edu.zucc.hbase;
import java.io.IOException;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
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.client.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
public class HbasePractice {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//列出所有的表
public static void listTables() throws IOException
{
HTableDescriptor[] hTableDescriptors = admin.listTables();
for (HTableDescriptor hTableDescriptor : hTableDescriptors)
{
System.out.println("表名:" + hTableDescriptor.getNameAsString());
}
}
//在终端打印出指定的表的所有记录数据
public static void getData(String tableName) throws IOException
{
init();
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner)
{
printRecoder(result);
}
}
public static void printRecoder(Result result) throws IOException
{
for (Cell cell : result.rawCells())
{
System.out.print("行健: " + new String(CellUtil.cloneRow(cell))+" ");
System.out.print("列簇: " + new String(CellUtil.cloneFamily(cell))+" ");
System.out.print(" 列: " + new String(CellUtil.cloneQualifier(cell))+" ");
System.out.print(" 值: " + new String(CellUtil.cloneValue(cell))+" ");
System.out.println("时间戳: " + cell.getTimestamp()); } }
//向已经创建好的表添加的列族或列
public static void insertRow(String tableName, String rowKey, String colFamily, String col, String val) throws IOException
{
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
table.put(put);
table.close();
}
//向已经创建好的表删除指定的列族或列
public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException
{
Table table = connection.getTable(TableName.valueOf(tableName));
Delete delete = new Delete(rowKey.getBytes());
delete.addFamily(Bytes.toBytes(colFamily));
delete.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));
table.delete(delete);
table.close();
}
//清空指定的表的所有记录数据
public static void clearRows(String tableName) throws IOException
{
TableName tablename = TableName.valueOf(tableName);
admin.disableTable(tablename);
admin.truncateTable(tablename, false);
}
//统计表的行数
public static void countTable(String tableName) throws IOException
{
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
int num = 0;
for (Result result = scanner.next(); result != null; result = scanner .next())
{
num++;
}
System.out.println("行数:" + num);
scanner.close();
}
//初始化
public static void init()
{
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
try
{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}
catch (IOException e)
{
e.printStackTrace();
}
}
//关闭hbase
public static void close()
{
try
{
if (admin != null)
{
admin.close();
}
if (connection != null)
{
connection.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
//主函数
public static void main(String[] args)
{
try
{
int n=0;
init();
Scanner in = new Scanner(System.in);
while(n!=7)
{
System.out.println("1.列出 Hbase 所有的表的信息");
System.out.println("2.在终端打印出指定表的所有记录数据");
System.out.println("3.向已创建好的表添加指定的列族列");
System.out.println("4.向已创建好的表删除指定的列族列");
System.out.println("5.清空指定的表的所有记录数据");
System.out.println("6.统计表的行数");
System.out.println("7.退出");
System.out.println("请选择:");
if(in.hasNextInt())
{
n=in.nextInt();
}
else
{
System.out.println("输入的不是整数,请重新输入:");
continue;
}
switch(n)
{
case 1:listTables(); break;
case 2:getData("student");break;
case 3:insertRow("student", "00000000", "score", "math", "99"); break;
case 4:deleteRow("student", "00000000", "score", "math"); break;
case 5:clearRows("student"); break;
case 6:countTable("student"); break;
case 7:break;
default:System.out.println("输入错误,请重新输入");
}
}
close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}