HBase连接数据库(集群)

Posted SunnyCx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase连接数据库(集群)相关的知识,希望对你有一定的参考价值。

一.使用java接口对hbase进行表的创建
1.引入需要的jar包
2.代码:

public static void main(String[] args) throws Exception {
        //得到配置
        Configuration  conf= HBaseConfiguration.create();
        //连接zookeeper,就可以对hbase进行操作
        conf.set("hbase.zookeeper.quorum", "itcast04:2181,itcast05:2181,itcast06:2181");
       //使用java接口创建表
        HBaseAdmin admin=new HBaseAdmin(conf);
        //指定表名
        HTableDescriptor htd=new HTableDescriptor(TableName.valueOf("peoples"));
        //添加列族(info,data)
        HColumnDescriptor hcd_info=new HColumnDescriptor("info");
        hcd_info.setMaxVersions(3);
        HColumnDescriptor hcd_data=new HColumnDescriptor("data");
        htd.addFamily(hcd_info);
        htd.addFamily(hcd_data);
        //创建表
        admin.createTable(htd);
        //关闭
        admin.close();
    }

二.使用java接口对hbase中的表进行crud操作

package cn.itcast.hbase;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
//import org.apache.hadoop.fs.shell.CopyCommands.Get;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hdfs.DFSClient.Conf;
import org.junit.Before;
import org.junit.Test;

import org.apache.hadoop.hbase.util.Bytes;



public class HBaseDemo {

    
    private Configuration conf=null;
    
    //在所有方法之间初始化
    @Before
    public void init(){
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "itcast04:2181,itcast05:2181,itcast06:2181");
    }
    
    //-------------一次插入一条数据------------------
    //插入数据
    @Test
    public void  testPut() throws Exception{
        //得到一个表对象
        HTable table =new HTable(conf, "peoples");
        //得到一个Put对象
        //将字符串转换为字符数组
        Put put=new Put(Bytes.toBytes("kr0001"));
        put.add(Bytes.toBytes("info"), Bytes.toBytes("name"), Bytes.toBytes("zhangsanfeng"));
        put.add(Bytes.toBytes("info"), Bytes.toBytes("age"), Bytes.toBytes("300"));
        put.add(Bytes.toBytes("info"), Bytes.toBytes("money"), Bytes.toBytes(3000));
        //在表中放入put对象   
        table.put(put);
        table.close();
    }
    
    //插入100万条,速度会很快(服务器几秒,自己的电脑1分半)对比Oracle,mysql
    //-------------一次插入海量数据------------------
    @Test
    public void testPutAll() throws IOException{
        
        //HTablePool pool=new HTablePool(config,10);
        HTable table =new HTable(conf, "peoples");
        //得到list对象
        List<Put> puts=new ArrayList<Put>(10000);
//      //第一种方式
//        //将put放入list中
//        for(int i=1;i<=1000000;i++){
//            Put put=new Put(Bytes.toBytes("kr"+i));
//            put.add(Bytes.toBytes("info"), Bytes.toBytes("money"), Bytes.toBytes(""+i));
//            puts.add(put);
//        }
//        //在表中放入List
//        table.put(puts);
//        table.close();
        
        //第二种方式
    for(int i=1;i<=1000000;i++){
        Put put=new Put(Bytes.toBytes("kr"+i));
        put.add(Bytes.toBytes("info"), Bytes.toBytes("money"), Bytes.toBytes(""+i));
        puts.add(put);
        //每隔1w条放一次
        if(i%10000==0){
            table.put(puts);
            puts=new ArrayList<Put>(10000);//相当于清空
        }
    }
    table.put(puts);
    table.close();
        
        
    }
    //--------查询一个(不到1s)-----------------
    @Test
    public void testGet() throws IOException{
        HTable table =new HTable(conf, "peoples");
        Get get =new Get(Bytes.toBytes("kr999999"));
        //传get对象
        //返回result对象
        Result result=table.get(get);
        String r=Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("money")));
        System.out.println(r);
        table.close();
    }
    
    //--------查询多个-----------------
    @Test
    public void testScan() throws IOException{
        HTable table =new HTable(conf, "peoples");
        //创建scan对象(按照字典顺序排[))
        Scan scan=new Scan(Bytes.toBytes("kr299990"), Bytes.toBytes("kr300000"));
        //返回结果集
        ResultScanner scanner=table.getScanner(scan);
        for(Result result:scanner){
            String r=Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("money")));
            System.out.println(r);
        }
        table.close();
    }
    //--------更新(put将老版本覆盖,查询最新的)-----------------
    
    //--------删除成功--------------------
    @Test
    public void testDel() throws IOException{
         HTable table =new HTable(conf, "peoples");
        //创建delete对象
         Delete delete = new Delete(Bytes.toBytes("kr999999"));
         table.delete(delete);
         table.close();
    }
    
    
    
    //---------创建表---------------------------
    public static void main(String[] args) throws Exception {

       //使用java接口创建表
        HBaseAdmin admin=new HBaseAdmin(conf);
        //指定表名
        HTableDescriptor htd=new HTableDescriptor(TableName.valueOf("peoples"));
        //添加列族(info,data)
        HColumnDescriptor hcd_info=new HColumnDescriptor("info");
        hcd_info.setMaxVersions(3);
        HColumnDescriptor hcd_data=new HColumnDescriptor("data");
        htd.addFamily(hcd_info);
        htd.addFamily(hcd_data);
        //创建表
        admin.createTable(htd);
        //关闭
        admin.close();
    }

}

 

以上是关于HBase连接数据库(集群)的主要内容,如果未能解决你的问题,请参考以下文章

Java 连接 HBase ( kerberized 集群 )

HBase实战:使用JAVA操作分布式集群HBASE

HBase-replication流程

zk集群数据迁移和恢复

四、HBase客户端

Hbase集群搭建及所有配置调优参数整理及API代码运行