Hbase学习以及hbase下表的增删查操作

来源:互联网 发布:网络买古瓷咋卖 编辑:程序博客网 时间:2024/04/27 15:00

一、什么是HBase?

HBase是一个分布式的、面向列的开源数据库。基于hadoop,不支持SQL语句,遵循CAP理论(强一致性、可用性、分区容错性)

且CAP理论只能满足其中的两个特性,三个不能同时满足。

ase特性:
1、数据量大;

2、面向列;

3、数据稀疏;

4、多版本(同一个地方存储多个数据);

5、无类型;

6、强一致性;

7、有限的查询(仅支持三种查询:单个行健查询、通过rowkey的range查询、全表扫描);

8、高性能的随机读写。

HBase基本概念:

行:同一rowkey对于的所有数据;

列族:相似的列数据通常被划分到一个列族中,可以看做一个类;

列:可以看做是类中的一个属性;

数据:每一个数据都有一个版本(时间戳),每一个列的数据可以有多个版本,版本的个数可以在建表时设置。

HBase的数据模型:
三维可排序
StoredMap<rowkey,List<SorterMap<Column,List<timestamp,value>>>>
rowkey(ASC) + column(ASC) + version(DESC)

简而言之就是rowkey(行键)下可对应多个列族(Family),一个列族下又可对应多个列(column),一个列可以有多个版本,也就是value值,它存储在同一个地方。可以看到,除去Hadoop的优势,HBase本身就是十分强大的数据库,它能够融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理的能力。总的来说,Hbase能够让你在大量的数据中查询记录,也可以从中获得综合分析报告。

如下图,12345代表它的行键,info是它的列族,email、name、power是对应列族下的列,value后面是他存储的数据。这里只有一个info列族,可以设计多个列族、根据情况需要。



HBase体系架构:


Hbase基本组件说明:(Hbase基本组件说明参考了http://blog.csdn.net/woshiwanxin102213/article/details/17584043)

Client

包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。

Master

为Region server分配region;

负责Region server的负载均衡;

发现失效的Region server并重新分配其上的region;

管理用户对table的增删改查操作。

Region Server

Regionserver维护region,处理对这些region的IO请求;

Regionserver负责切分在运行过程中变得过大的region。

Zookeeper作用

通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册;

存贮所有Region的寻址入口;

实时监控Region server的上线和下线信息。并实时通知给Master;

存储HBase的schema和table元数据;

默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper;

Zookeeper的引入使得Master不再是单点故障。



接下来看一个实例:

HBase建删查表:

package com.yc.hadoop.hbase;import java.io.IOException;import java.util.Scanner;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.Admin;import org.apache.hadoop.hbase.client.Connection;import org.apache.hadoop.hbase.client.ConnectionFactory;public class HbaseAPI02 {public static void main(String[] args) throws IOException {                Configuration conf = HBaseConfiguration.create();  //加载hadoop和hbase的配置文件创建配置文件对象conf.set("hbase.zookeeper.quorum", "slave01,slave02,slave03");  //设置hbase用哪个zookeeper协调管理,设置多个可以防止挂掉,可以只设置一个ExecutorService pool = Executors.newCachedThreadPool();Connection con = ConnectionFactory.createConnection(conf, pool); //通过连接工厂对象,创建hbase连接对象if(con != null){System.out.println("连接成功。。。");}else{System.out.println("连接失败!");}//管理者:can be used to create, drop, list, enable and disable tables, add and drop tableAdmin admin = con.getAdmin();//创建表:创建表时,要指定表名和列族名(可以有多个)TableName tn = TableName.valueOf("student"); //通过表名对象创建表结构对象HTableDescriptor htd = new HTableDescriptor(tn); if(admin.tableExists(tn)){  //判断在hbase中表是否存在System.out.println("表:"+ tn.getNameAsString() +"已存在!");}else{System.out.println("表:"+ tn.getNameAsString() +"不存在,创建表!");HColumnDescriptor hcd01 = new HColumnDescriptor("info");  //通过列族名创建表的列族结构HColumnDescriptor hcd02 = new HColumnDescriptor("score"); //通过列族名创建表的列族结构htd.addFamily(hcd01);   //将列族对象整合到表结构对象中htd.addFamily(hcd02);admin.createTable(htd);  //hbase数据库管理者通过表结构对象创建表System.out.println("表:"+ tn.getNameAsString() +"创建成功!");}System.out.println("===============================");//列出表操作TableName[] tns = admin.listTableNames();System.out.println("hbase中的表有以下:");for (TableName tableName : tns) {System.out.println("\t" + tableName.getNameAsString());}System.out.println();//删除表操作Scanner input = new Scanner(System.in);System.out.println("请输入要删除的表名:");TableName delTN = TableName.valueOf(input.next());if(admin.tableExists(delTN)){admin.disableTable(delTN);  //使表失效admin.deleteTable(delTN);  //删除表System.out.println("表:"+ delTN.getNameAsString() +"删除成功!");}else{System.out.println("表:"+ delTN.getNameAsString() +"不存在,请创建表。。。");}input.close();admin.close();con.close();pool.shutdown();}}

这是一个简单的hbase运用,我们创建了一个student表,列族为info和score。通过desc ‘student’我们可以查看到表的描述结果,如下:


我们还可以查看hbase下有哪些表:


我们输入test则可删除test表。这都是关于表的一些操作。

那同样的像传统数据库一样,我们可以对hbase下表里面的数据进行一些增删查改的操作以及建立索引等一系列的操作。这个下次再写吧。。。。








原创粉丝点击