HBASE 单机搭建

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、下载

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值