继上一篇文章
我们首先来替换下hbase的lib目录下hadoop相关的jar包,换成2.6的
在eclipse的java project中,直接引入hbase的lib下的所有jar
省的到时候这个类找不到,那个类找不到的,不然你就一个一个的jar去添加,尝试,找个最小集
下面看下java代码的实现吧
HBaseUtil
package hbase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
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;
public class HBaseUtil {
private Configuration conf;
private HBaseAdmin admin;
public HBaseUtil() throws IOException {
Configuration cnf = new Configuration();
this.conf = HBaseConfiguration.create(cnf);
this.admin = new HBaseAdmin(this.conf);
}
public HBaseUtil(Configuration conf) throws IOException {
this.conf = HBaseConfiguration.create(conf);
this.admin = new HBaseAdmin(this.conf);
}
public void createTable(String tableName, String columnFamily[]) {
try {
if (this.admin.tableExists(tableName)) {
System.out
.println("Table : " + tableName + " already exists !");
} else {
HTableDescriptor td = new HTableDescriptor(tableName);
int len = columnFamily.length;
for (int i = 0; i < len; i++) {
HColumnDescriptor family = new HColumnDescriptor(
columnFamily[i]);
td.addFamily(family);
}
admin.createTable(td);
System.out.println(tableName + " 表创建成功!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表创建失败!");
}
}
public void deleteTable(String tableName) {
try {
if (this.admin.tableExists(tableName)) {
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println(tableName + " 表删除成功!");
} else {
System.out.println(tableName + " 表不存在!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表删除失败!");
}
}
public void insertRecord(String tableName, String rowKey,
String columnFamily, String qualifier, String value) {
try {
HTable table = new HTable(this.conf, tableName);
Put put = new Put(rowKey.getBytes());
put.add(columnFamily.getBytes(), qualifier.getBytes(),
value.getBytes());
table.put(put);
System.out.println(tableName + " 表插入数据成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表插入数据失败!");
}
}
public void deleteRecord(String tableName, String rowKey) {
try {
HTable table = new HTable(this.conf, tableName);
Delete del = new Delete(rowKey.getBytes());
table.delete(del);
System.out.println(tableName + " 表删除数据成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表删除数据失败!");
}
}
public Result getOneRecord(String tableName, String rowKey) {
try {
HTable table = new HTable(this.conf, tableName);
Get get = new Get(rowKey.getBytes());
Result rs = table.get(get);
System.out.println(tableName + " 表获取数据成功!");
return rs;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public List getAllRecords(String tableName) {
try {
HTable table = new HTable(this.conf, tableName);
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
List list = new ArrayList();
for (Result r : scanner) {
list.add(r);
}
scanner.close();
System.out.println(tableName + " 表获取所有记录成功!");
return list;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
以上工具类是包含了所有的表的操作,下面再来看一个测试类
HBaseDemo
package hbase;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
public class HbaseDemo {
public static void main(String[] args) {
Configuration config = new Configuration();
config.set("hbase.zookeeper.quorum", "com23.authentication,com22.authentication,com21.authentication");
config.set("hbase.zookeeper.property.clientPort", "2181");
//config.set("hbase.master", "192.168.11.179:6000");
try {
HBaseUtil hbase = new HBaseUtil(config);
String tableName = "flume";
String[] columnFamily = {"chiwei","lining","taotao"};
hbase.createTable(tableName, columnFamily);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
大家自行去测试吧,下面说下代码原理
对hbase进行配置
管理Hbase数据库表信息的接口
public void createTable(String tableName, String columnFamily[]) {
try {
if (this.admin.tableExists(tableName)) {
System.out
.println("Table : " + tableName + " already exists !");
} else {
HTableDescriptor td = new HTableDescriptor(tableName);
int len = columnFamily.length;
for (int i = 0; i < len; i++) {
HColumnDescriptor family = new HColumnDescriptor(
columnFamily[i]);
td.addFamily(family);
}
admin.createTable(td);
System.out.println(tableName + " 表创建成功!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表创建失败!");
}
}
HTableDescriptor表的名字及其表的列族
2、实例化表的描述符
3、依次添加列族
4、创建表
public void deleteTable(String tableName) {
try {
if (this.admin.tableExists(tableName)) {
admin.deleteTable(tableName);
System.out.println(tableName + " 表删除成功!");
} else {
System.out.println(tableName + " 表不存在!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表删除失败!");
}
}
通过HBaseAdmin接口来删除表
public void insertRecord(String tableName, String rowKey,
String columnFamily, String qualifier, String value) {
try {
HTable table = new HTable(this.conf, tableName);
Put put = new Put(rowKey.getBytes());
put.add(columnFamily.getBytes(), qualifier.getBytes(),
value.getBytes());
table.put(put);
System.out.println(tableName + " 表插入数据成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表插入数据失败!");
}
}
实例化一个put对象,rowkey按照是每行的一个关键字,相当于主键,然后put添加列族和列修饰符以及列内容,最后调用table的put方法
public Result getOneRecord(String tableName, String rowKey) {
try {
HTable table = new HTable(this.conf, tableName);
Get get = new Get(rowKey.getBytes());
Result rs = table.get(get);
System.out.println(tableName + " 表获取数据成功!");
return rs;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
查询需要实例化Get对象,通过rowkey主键来查询
Result rs = hbase.getOneRecord("flume", "love");
for (Cell cell : rs.rawCells()) {
System.out.println(new String(cell.getRow()) + " "
+ new String(cell.getFamily()) + " "
+ new String(cell.getQualifier()) + " "
+ new String(cell.getValue()));
}
public void deleteRecord(String tableName, String rowKey) {
try {
HTable table = new HTable(this.conf, tableName);
Delete del = new Delete(rowKey.getBytes());
table.delete(del);
System.out.println(tableName + " 表删除数据成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println(tableName + " 表删除数据失败!");
}
}
实例化Delete对象,通过rowkey删除
public List getAllRecords(String tableName) {
try {
HTable table = new HTable(this.conf, tableName);
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
List list = new ArrayList();
for (Result r : scanner) {
list.add(r);
}
scanner.close();
System.out.println(tableName + " 表获取所有记录成功!");
return list;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
通过实例化Scanner对象,逐条添加到list集合中
List list = hbase.getAllRecords("flume");
Iterator it = list.iterator();
while(it.hasNext()) {
Result rs = it.next();
for (Cell cell : rs.rawCells()) {
System.out.println(new String(cell.getRow()) + " "
+ new String(cell.getFamily()) + " "
+ new String(cell.getQualifier()) + " "
+ new String(cell.getValue()));
}
}