1.
Hbase安装(单机linux版数据库)
1.1环境说明
Centos Linux系统环境(文档以linux系统使用安装为主)
1.2
安装
1.2.1系统设置说明
1. 开放linux服务器端口:sudo vi /etc/sysconfig/iptables
2.
添加hosts文件
> Sudo vi /etc/hosts
3. 安装jdk环境(1.7及以上版本)
1.2.2下载安装
1、下载
- 解压文件
>tar –zxvf hbase-0.98.23-hadoop2-bin.tar.gz #解压文件
3、修改hbase配置文件
> Vi /home/hadoop/server/hbase-1.2.4/conf/hbase-site.xml
4、启动hbase数据库
> /home/hadoop/server/hbase-1.2.4/bin/start-hbase.sh
验证是否启动成功: 在客户端端使用浏览器访问
1.3操作数据库
1.3.1 shell操作数据库
1.3.2 java api操作数据库
1. 添加maven依赖
<
dependency
>
<
groupId
>
org.apache.hbase
</
groupId
>
<
artifactId
>
hbase-client
</
artifactId
>
<
version
>
1.2.4
</
version
>
</
dependency
>
2. 执行下列示例创建表代码
import
com.alibaba.fastjson.JSON;
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.util.HashMap;
import
java.util.Map;
import
java.util.logging.Logger;
/**
* Created by songsj on 2016/11/16.
*/
public class
HBase {
public static void
main(String[] args){
HBaseDB hbase =
new
HBaseDB();
/*
创建表
*/
hbase.createTable(
"shopping"
);
/*
删除表
*/
hbase.dropTable(
"shopping"
);
/*
表
insert*/
Map<String,String> shop =
new
HashMap<String,String>();
shop.put(
"shopmanager.admin"
,
"leige"
);
shop.put(
"shopmanager.manager"
,
"xiaoshaoAndGangge"
);
shop.put(
"shopmanager.saler"
,
"SongsongAndme"
);
hbase.insert(
"shopping"
,
"LaTiaoWo"
,shop);
/*
表
update*/
hbase.update(
"shopping"
,
"LaTiaoWo"
);
/*
表
select*/
hbase.select(
"shopping"
,
"LaTiaoWo"
,
"shopmanager"
,
"admin"
);
/*
表
delete*/
hbase.delete(
"shopping"
,
"LaTiaoWo"
,
"shopmanager"
,
"admin"
);
}
}
class
HBaseDB{
private static
Logger
HbaseLog
= Logger.
getLogger
(
"HBaseDB.class"
);
private
Admin
admin
;
private
Connection
connection
;
private
Configuration
configuration
;
/**
*
初始化配置数据
*/
HBaseDB(){
configuration
= HBaseConfiguration.
create
();
configuration
.set(
"hbase.zookeeper.property.clientPort"
,
"2181"
);
configuration
.set(
"hbase.zookeeper.quorum"
,
"192.168.0.241"
);
}
/**
* create shopping
表
*
@param
tableName
*/
public void
createTable(String tableName) {
HbaseLog
.info(
"************
开始创建【
"
+ tableName +
"
】表
***********"
);
try
{
/*
创建数据库连接
*/
this
.openConnect();
/*
判断表是否存在
*/
if
(!
admin
.isTableAvailable(TableName.
valueOf
(tableName))) {
/*
表对象
*/
HTableDescriptor hbaseTable =
new
HTableDescriptor(TableName.
valueOf
(tableName));
/*
添加列簇
*/
hbaseTable.addFamily(
new
HColumnDescriptor(
"shopmanager"
));
hbaseTable.addFamily(
new
HColumnDescriptor(
"shopdescribe"
));
hbaseTable.addFamily(
new
HColumnDescriptor(
"shopprovider"
));
admin
.createTable(hbaseTable);
HbaseLog
.info(
"************
表创建完成
***********"
);
}
else
{
HbaseLog
.info(
"**
表已存在
!!! **"
);
}
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
/*
关闭数据库连接
*/
this
.closeConnect();
}
}
/**
* delete shopping
表
*
@param
tableName
*/
public void
dropTable(String tableName) {
HbaseLog
.info(
"************
开始删除【
"
+ tableName +
"
】表
***********"
);
try
{
this
.openConnect();
/*
判断表是否存在
*/
if
(
admin
.isTableAvailable(TableName.
valueOf
(tableName))) {
/*
将表设置为不可用
*/
admin
.disableTable( TableName.
valueOf
(tableName) );
/*
删除表
*/
admin
.deleteTable(TableName.
valueOf
(tableName));
HbaseLog
.info(
"************
表已删除
***********"
);
}
else
{
HbaseLog
.info(
"*****
表不存在
!!! *****"
);
}
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
this
.closeConnect();
}
}
/**
* insert shopping
数据
*
@param
tableName
表名
*
@param
rowkey
行数据
id
*
@param
data
变更数据
*/
public void
insert(String tableName,String rowkey,Map<String,String> data) {
HbaseLog
.info(
"************
开始
insert/update
【
"
+ tableName +
"
】表
***********"
);
try
{
if
(!data.isEmpty()){
this
.openConnect();
/*
获取
shopping
表对象
*/
Table table =
connection
.getTable(TableName.
valueOf
( tableName ));
/*
添加行
id*/
Put shop =
new
Put(Bytes.
toBytes
(rowkey));
String[] columns =
null
;
/**
添加列簇,列,列对应的值
* columns[0]:family
* columns[1]:column
*/
for
(Map.Entry<String,String> entry:data.entrySet()){
columns = entry.getKey().split(
"
\\
."
);
shop.addColumn(Bytes.
toBytes
(columns[
0
]), Bytes.
toBytes
(columns[
1
]), Bytes.
toBytes
(entry.getValue()));
}
/*
向表中添加值
*/
table.put(shop);
HbaseLog
.info(
"************ insert/update
【
"
+ tableName +
"
】表完成
***********"
);
}
else
{
HbaseLog
.info(
"************ insert/update
数据为空
***********"
);
}
}
catch
(Exception e){
e.printStackTrace();
}
finally
{
this
.closeConnect();
}
}
/**
* select
数据
*
@param
tableName
表名
*
@param
rowKey
行
id
*
@param
family
列簇
*
@param
coumln
列
*/
public void
select(String tableName,String rowKey,String family,String coumln){
HbaseLog
.info(
"************
开始
select
【
"
+ tableName +
"
】表,【
"
+rowKey+
"
】列
***********"
);
try
{
this
.openConnect();
/*
获取表对象
*/
Table table =
connection
.getTable(TableName.
valueOf
( tableName ));
/*
根据
rowkey
获取行数据
*/
Get g =
new
Get(Bytes.
toBytes
(rowKey));
Result shop = table.get(g);
/*
获取行数据列簇中的列值
*/
byte
[] value = shop.getValue(Bytes.
toBytes
(family),Bytes.
toBytes
(coumln));
HbaseLog
.info(
"******** select
数据
*********:
【
"
+ Bytes.
toString
(value) +
"
】
"
);
}
catch
(Exception e){
e.printStackTrace();
}
finally
{
this
.closeConnect();
}
}
/**
* update shopping
表 数据
*
@param
tableName
*/
public void
update(String tableName,String rowkey){
/*
更新的数据内容
*/
Map<String,String> updateData =
new
HashMap<String,String>();
updateData.put(
"shopmanager.admin"
,
"leige"
);
updateData.put(
"shopmanager.manager"
,
"xiaoshaoAndGangge"
);
updateData.put(
"shopmanager.saler"
,
"SongsongAndme"
);
/*
数据更新即将原数据重新
insert */
insert(tableName,rowkey,updateData);
}
/**
* delete shopping
表 数据
*
@param
tableName
表名
*
@param
rowkey
行
id
*
@param
family
列簇
*
@param
coumln
列
*/
public void
delete(String tableName, String rowkey,String family,String coumln) {
/*
*
参数例子
* rowkey = shopmanager
* tableName = shopping
*/
HbaseLog
.info(
"************
开始
delete
【
"
+tableName+
"
】表,【
"
+rowkey+
"
】列
***********"
);
try
{
this
.openConnect();
/*
创建表对象
*/
Table table =
connection
.getTable(TableName.
valueOf
( tableName ));
/*
创建
delete
对象
*/
Delete shop =
new
Delete(Bytes.
toBytes
(rowkey));
/*
添加要操作的列
*/
shop.addColumn(Bytes.
toBytes
(family), Bytes.
toBytes
(coumln));
/*
删除数据操作
*/
table.delete(shop);
HbaseLog
.info(
"************
删除【
"
+tableName+
"
】表完成
***********"
);
}
catch
(Exception e){
e.printStackTrace();
}
finally
{
this
.closeConnect();
}
}
/**
*
创建数据库连接
*/
public void
openConnect(){
try
{
connection
= ConnectionFactory.
createConnection
(
configuration
);
admin
=
connection
.getAdmin();
}
catch
(Exception e){
e.printStackTrace();
}
}
/**
*
关闭数据库连接
*/
public void
closeConnect(){
try
{
if
(
admin
!=
null
) {
admin
.close();
}
if
(
connection
!=
null
&& !
connection
.isClosed()) {
connection
.close();
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
3.
执行后使用
shell
验证