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验证