Hbase
HBase是一个分布式的、面向列的开源数据库,可伸缩的分布式存储系统。
Hbase在Hadoop架构中的位置如下图所示:
在Hadoop体系中,HBase位于结构化存储层,HBase利用Hadoop MapReduce来处理HBase中的海量数据。利用Zookeeper作为相同服务,Zookeeper为HBase提供了稳定服务和failover机制。
Hadoop HDFS为HBase提供了高可靠性的底层存储支持。
Java程序操作Hbase数据库
首先Java程序操作数据库需要在项目中导入Hbase与hadoop 相关的Jar包。并且配置winutils.exe
的环境变量路径。
winutils.exe
的环境变量配置如下(winutils.exe位于hadoop/bin/winutils.exe
):
Maven工程中添加相关依赖:
(如果不能成功加载,请手动相关jar包放入maven本地仓库)
使用Java与HBase集群交互时,需要创建一个HTable实例,使用该实例提供的相关方法进行插入/删除/查询操作。
那么如何创建一个HTable实例呢?
1、先要创建一个Configuration对象(该对象)
Configuration conf = HBaseConfiguration.create();
Conf.set(“hbase.zookeeper.property.clientPort”,”2181”);
2、利用conf对象得到HConnection对象
conn = HConnectionManager.getConnection(conf);
3、利用conn对象得到HTable对象
HTable table = conn.getTable(tableName);
注意:
HConnection实际上去连接的并不是HBase集群本身,而是维护其关键数据信息的Zookeeper(简称ZK)集群
HTable的父类HTableInterface是非线程安全的,而且创建该HtableInterface的过程是轻量级的,只要保证我们用的是一个Configuration对象是同一个,那么HConnection也是同一个,使用同一个Confuguration的HTable都会共用一个HConnection。这样我们就可以利用单例模式获得全局唯一的实例Configuration和HConnection对象,然后以多线程的形式创建HTable对象,这样就实现了HBase连接池。
查询操作:
//创建一个空的Scan实例
Scan scan= new Scan();
2、//在行上获取遍历器
ResultScanner rs= table.getScanner(scan);
3、//打印行的值
for (Result r: rs) {
System.out.println(r);
}
向指定表中插入数据:
Table table = connection.getTable(TableName.valueOf(tableName.getBytes()));
Put put = new Put(rowkey.getBytes());
put.addColumn(family.getBytes(),qualifier.getBytes(), value.toString().getBytes());
table.put(put);
代码未完待续。。。