通过Java对HBase进行操作
使用Java对hbase进行操作是,也需要像我们对关系数据进行的操作类似,都需要导入驱动、添加配置、连接数据库然后对数据库进行操作。
1. 导入驱动
- 导入hbase-client.jar驱动包
在pom.xml 中添加hbase依赖即可
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
<scope>compile</scope>
</dependency>
2. 创建Configuration对象
Configuration对象指定Hbase相关参数,如下代码指定的是zookeeper的相关配置。
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", zkQuorum);
configuration.set("hbase.zookeeper.property.clientPort", zkPort);
3. 使用HBaseAdmin对象对Hbase数据库进行操作
Admin对象后,可以通过下面的代码创建数据表了
- 与hbase相关的类
1.HBaseAdmin
实现 Admin类 可以用来创建,删除,列表,启用和禁用表,添加和删除表列的列族和其他的管理操作。
官方API2.HTableDescriptor
描述Hbase表的详细信息。官方API3.HColumnDescriptor
HColumnDescriptor包含一个列族的信息如版本的数量,压缩设置,等等。它被用作输入当创建一个表或添加一个列。可以通过实例化方法创建一个指定名称的列族具体方法实现参考API4.HbaseTemplate
是HBase API的核心类,主要对Hbase表中的数据进行操作,简化了HBase并且避免一些常见的错误。API
以下代码是创建名为emp表,
/**
* Created by 151029 on 2016/8/3.
* 对于emp表的操作,创建表,对表做基本的操作
*/
@Component
public class EmpUtils {
private String tableName = "emp";
// private byte[] tableNameAsBytes = Bytes.toBytes("emp");
// 注入配置文件
@Resource(name = "hbaseConfiguration")
private Configuration config;
/**
* Admin可以用来创建,删除,列表,启用和禁用表,
* 添加和删除表列的家庭和其他的管理操作。
* HBaseAdmin实现了Admin
*/
private HBaseAdmin admin;
private HbaseTemplate hbaseTemplate;
@Autowired
private EmpRepository empRepository;
//初始化方法, 判断表是否存在,存在删除,不存在创建
public void initialize() throws IOException {
//判断表是否存在
if (admin.tableExists(tableName)) {
//判断指定的表是否启动
if (!admin.isTableDisabled(tableName)) {
//isTableDisabled 返回true 说明表示离线状态
System.out.printf("Disabling %s\n", tableName);
admin.disableTable(tableName); //禁用表
}
System.out.printf("Deleting %s\n", tableName);
admin.deleteTable(tableName); // 删除表
}
// hbase 表的详细信息
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
// 维护列族的信息 HColumnDescriptor被用作输入当创建表或者添加一个列。
HColumnDescriptor columnDescriptor = new HColumnDescriptor(
EmpRepository.CF_INFO);
// 添加列族
tableDescriptor.addFamily(columnDescriptor);
// 创建表
admin.createTable(tableDescriptor);
}
// 添加信息
public void addEmp(Emp emp){
empRepository.save(emp);
}
/**
* 插入信息指定的列族名称的列的值,疑问:是否是修改功能
* @param rowKey 行健
* @param familyName 列族名称
* @param qualifier 列族中列的名称
* @param value 要插入的值,注意是字节类型的数组
*/
public void put(final String rowKey, final String familyName,final String qualifier, final byte[] value ){
hbaseTemplate.put(tableName, rowKey, familyName, qualifier, value);
}
}