java API对Hbase进行基本的操作

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.HBaseConfiguration;
public class myHbase {
public static Configuration configuration; //管理Hbase的配置信息
public static Connection connection; //管理Hbase的连接信息
public static Admin admin; //管理Hbase数据库的信息
public static void init() //建立连接
{
configuration=HBaseConfiguration.create(); //使用默认的Hbase配置文件创建configuration
configuration.set("hbase.zookeeper.quorum", "quickstart.cloudera");
//这部分需要根据Hbase中的配置文件内容来填写
try
{
connection=ConnectionFactory.createConnection(configuration);
admin=connection.getAdmin();
}
catch (IOException e)
{
e.printStackTrace();
}
}

public static void close() //关闭连接
{
try
{
if(admin!=null)
admin.close();
if(null!=connection)
connection.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}

public static void createTable(String myTableName,String[] colFamily) throws IOException //创建表
{ //myTableName为表名,colFamily为列族数组
TableName tableName=TableName.valueOf(myTableName); //获取当前表名转换成TableName
if(admin.tableExists(tableName)) //判断当前表是否存在
{
System.out.println("table exist!"); //若存在,输出该表已存在
}
else //否则,创建该表
{
HTableDescriptor hTableDescriptor =new HTableDescriptor(tableName);
for(String str:colFamily)
{
HColumnDescriptor hColumnDescriptor=new HColumnDescriptor(str);
hTableDescriptor.addFamily(hColumnDescriptor); //添加列族
}
admin.createTable(hTableDescriptor); //调用admin的createTable方法创建表
}
}

public static void listTable() throws IOException
{//列出Hbase数据库中的所有表的表名
HTableDescriptor[] tableDescriptor=admin.listTables();
for(int i=0;i<tableDescriptor.length;i++)
{
System.out.println(tableDescriptor[i].getNameAsString());
}
}

public static void insertData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException
{//tableName表名,rowKey行键,colFamily列族,col列限定符,val数据
Table table=connection.getTable(TableName.valueOf(tableName));
Put put=new Put(rowKey.getBytes()); //向表中添加值
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes()); //根据指定的列族、列限定符、对应的值添加到Put实例中
table.put(put); //向表中添加值
table.close(); //关闭table
}

public static void addRecord(String tableName,String row,String[] fields,String[] values) throws IOException
{//向表tableName,行row,列fields,添加值values
String family=""; String col="";
Table table=connection.getTable(TableName.valueOf(tableName));
Put put=new Put(row.getBytes());
for(int i=0;i<fields.length;i++)
{
family=""; col="";
if(fields[i].contains(":"))
{
String[] str=fields[i].split(":");
family=str[0]; col=str[1];
put.addColumn(family.getBytes(), col.getBytes(), values[i].getBytes());
table.put(put);
}
else System.out.println("输入格式错误!");
}
table.close();
}

public static void scanColumn(String tableName,String column) throws IOException
{//浏览表tableName,列column指定的数据
TableName tablename = TableName.valueOf(tableName);
Table table = connection.getTable(tablename);
ResultScanner rs=table.getScanner(column.getBytes());
for(Result r:rs){
for(Cell c:r.rawCells()){
System.out.println(new String(CellUtil.cloneValue(c)));
System.out.println(c.getValue());
}
}
}


public static void getData(String tableName,String rowKey,String colFamily,String col) throws IOException //浏览数据
{//tableName表名,rowKey行,colFamily列族,col列限定符
Table table=connection.getTable(TableName.valueOf(tableName));
Get get=new Get(rowKey.getBytes()); //从指定行的某些单元格中取出相应的值
get.addColumn(colFamily.getBytes(), col.getBytes()); //根据列族和列限定符获得对应的列
Result result=table.get(get);
System.out.println(new String(result.getValue(colFamily.getBytes(), col==null?null:col.getBytes())));
table.close();
}

public static void modifyData(String tableName,String row,String column) throws IOException
{//修改表tableName,行row,列column指定的单元格的数据
Table table=connection.getTable(TableName.valueOf(tableName));
Put put=new Put(row.getBytes()); //向表中添加值
String[] str;
if(column.contains(":"))
{
str=column.split(":");
String colFamily=str[0]; String col=str[1];
System.out.println(colFamily+"this is "+col);
String val="100";
put.add(colFamily.getBytes(), col.getBytes(), val.getBytes()); //根据指定的列族、列限定符、对应的值添加到Put实例中
table.put(put); //向表中添加值
table.close(); //关闭table
}
else System.out.println("列族输入格式错误!没有列限定符");
}

public static void deleteRow(String tableName,String row) throws IOException
{//删除row指定的行
Table table=connection.getTable(TableName.valueOf(tableName));
Delete delete=new Delete(Bytes.toBytes(row));
table.delete(delete);
}

public static void main(String[] args) throws IOException //主函数
{
init(); //建立连接
close(); //关闭连接
}
}