关于 Maven问题,添加了如下依赖,貌似并不能解决依赖,最终使用了Hbase中lib文件夹里自带的jar包。
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
版本:
API:
package com.Hbase.TestDemo;
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 HbaseDemo {
public static Configuration conf;
public static Connection connection;
public static Admin admin;
/**
* 静态代码块最先执行
*/
static{
try {
//使用 HBaseConfiguration 的单例方法实例化
conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "centos01,centos02,centos03");
conf.set("hbase.zookeeper.property.clientPort", "2181");
//获取连接、管理员对象
connection = ConnectionFactory.createConnection(conf);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 判断表,是否存在
* @param tableName:表名
* @return 返回是否存在
*/
public static boolean isTableExist(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
//判断表是否存在
boolean exites = admin.tableExists(TableName.valueOf(tableName));
return exites;
}
/**
* 创建表
* @param tableName:表名
* @param columnFamily:列族,可变形参
*/
public static void createTable(String tableName, String... columnFamily) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{
if(columnFamily.length<=0){
System.out.println("需要设置列族信息!");
return;
}
//判断表是否存在
if(isTableExist(tableName)){
System.out.println("表" + tableName + ":已存在");
return;
}
//创建表属性对象(表描述器),表名需要转字节
HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
//循环创建多个列族
for(String cf : columnFamily){
//添加具体的列族信息 创建列族描述器
descriptor.addFamily(new HColumnDescriptor(cf));
}
//根据对表的配置,创建表
admin.createTable(descriptor);
System.out.println("表" + tableName + "创建成功!");
}
/**
* 删除表
* @param tableName:表名
*/
public static void dropTable(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException{
if(isTableExist(tableName)){
admin.disableTable(TableName.valueOf(tableName));
admin.deleteTable(TableName.valueOf(tableName));
System.out. println("表" + tableName + "删除成功!");
}else{
System.out.println("表" + tableName + "不存在!");
}
}
/**
* 向表中添加数据
* @param tableName:表名
* @param rowKey:rowkey
* @param columnFamily:列族
* @param column:列名
* @param value:值
* @throws IOException
*/
public static void putData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException{
//创建表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//向表中插入数据(需要转为字节数组)
Put put = new Put(Bytes.toBytes(rowKey));
//向 Put 对象中组装数据
put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(value));
table.put(put);
table.close();
System.out.println("插入数据成功");
//关闭table连接,每次操作的表不一样,不能公用tatble对象
table.close();
}
/**
* get方式获取数据
* @param tableName
* @param rowKey
* @param family
* @param qualifier
*/
public static void getData(String tableName, String rowKey, String family, String qualifier) throws IOException{
Table table = connection.getTable(TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowKey));
//2.0不填加,获取指定rowKey的所有信息
//2.1指定获取的列族,所有值
//get.addFamily(Bytes.toBytes(family));
//2.2获取指定族和列
//get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
Result result = table.get(get);
for(Cell cell : result.rawCells()){
System.out.println(" 行 键 :" + Bytes.toString(result.getRow()));
System.out.println(" 列 族 " + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(" 列 :" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(" 值 :" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
/**
* scan查询
* @param tableName:表名
*/
public static void scanTable(String tableName) throws IOException{
Table table = connection.getTable(TableName.valueOf(tableName));
//得到用于扫描 region 的对象
Scan scan = new Scan();
//使用 table 得到 resultcanner 实现类的对象
ResultScanner resultScanner = table.getScanner(scan);
//解析 resultScanner
for(Result result : resultScanner){
Cell[] cells = result.rawCells();
//解析result
for(Cell cell : cells){
//得到 rowkey
System.out.println(" 行 键 :" + Bytes.toString(CellUtil.cloneRow(cell)));
//得到列族
System.out.println(" 列 族 " + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println(" 列 :" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println(" 值 :" + Bytes.toString(CellUtil.cloneValue(cell)));
}
}
//关闭表连接
table.close();
}
/**
* 删除表中数据
* @param tableName
* @param rowKey
* @param family
* @param qualifier
*/
public static void deleteData(String tableName, String rowKey, String family, String qualifier) throws IOException {
//删除了整个rowkey的数据
//1.获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//2.构建删除对象
Delete delete = new Delete(Bytes.toBytes(rowKey));
//3.执行删除操作
table.delete(delete);
//4.关闭连接
table.close();
}
/**
* 最后关闭连接
*/
public static void close(){
if(admin != null){
try {
admin.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
/** DDL操作
//1、测试表是否存在
System.out.println(isTableExist("student"));
//2、创建表
System.out.println(isTableExist("test1"));
createTable("test1","info1","info2");
System.out.println(isTableExist("test1"));
//3、删除表
dropTable("test1");
*/
//1、插入数据
//putData("student","1003","info","name","jiangqingtai");
//2、查询数据
//getData("student","1001","info","1");
//3、查询表
//scanTable("student");
//4、删除表数据
//deleteData("student","1001","na","na");
//关闭连接
close();
}
}