
一、Hbase数据模型
hbase模式里的逻辑实体包括:
(1)表(table):HBase用表来组织数据。表名是字符串(String),由可以在文件系统路径里使用的字符组成。
(2)行(row):在表里,数据按行存储。行由行键(rowkey)唯一标识。行键没有数据类型,总是视为字节数组byte []。
(3)列族(column family):行里的数据按照列族分组,列族也影响到HBase数据的物理存放,因此,它们必须事前定义并且不轻易修改。表中每行拥有相同列族,尽管行不需要在每个列族里存储数据。列族名字是字符串(String),由可以在文件系统路径里使用的字符组成。
(4)列限定符(column qualifier):列族里的数据通过列限定符或列来定位。列限定符不必事前定义,列限定符不必在不同行之间保持一致。就像行键一样,列限定符没有数据类型,总是视为字节数组byte []。
(5)单元(cell):行键、列族和列限定符一起确定一个单元。存储在单元里的数据称为单元值(value)。值也没有数据类型,总是视为字节数组byte []。
(6)时间版本(version):单元值有时间版本。时间版本用时间戳标识,是一个long。没有指定时间版本时,当前时间戳作为操作的基础。HBase保留单元值时间版本的数量基于列族进行配置,默认数量是3个。
HBase的每个数据值使用坐标来访问。一个值的完整坐标包括行键、列族、列限定符和时间版本。由于把所有坐标视为一个整体,因此HBase可以看作是一个键值(key-value)数据库。
二、Hbase分布式部署
1、下载发布包
到HBase官方下载最新的版本 hbase-1.2.6-hadoop2-bin.tar.gz
$ tar xfz hbase-1.2.6-hadoop2-bin.tar.gz
$ cd hbase-1.2.6-hadoop2
2、配置系统环境
sudo vim /etc/profile
source /etc/profile
export HBASE_HOME="/usr/local/share/hbase"
export PATH=$HBASE_HOME/bin:$PATH
3、修改配置文件: 4、演示 4.1、启动HBase: 4.2、shell演示 建表、插入数据、查询数据、删除表 三、使用Java客户端对对自定的表进行CURD操作 Java代码: public class myHbase { private static Configuration conf= null; static { conf=HBaseConfiguration.create(); } /** * column familys add column <--->hbase columnName * @param tableName * @param familys * @throws Exception */ public void createTable(String tableName,String[] familys) throws Exception{ HBaseAdmin admin = new HBaseAdmin(conf); if(!admin.tableExists(tableName)){ HTableDescriptor desc = new HTableDescriptor(tableName); for (int i = 0; i < familys.length; i++) { desc.addFamily(new HColumnDescriptor(familys[i])); } admin.createTable(desc); }else{ System.out.println("the table:"+ tableName +" exsists"); }; } /** * @param tableName * @param rowKey * @param family * @param qualifier * @param value * @throws Exception */ public void putData(String tableName,String rowKey, String family, String qualifier, String value) throws Exception { HTable ht = new HTable(conf, tableName); Put put = new Put(Bytes.toBytes(rowKey)); put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value)); ht.put(put); } public static void main(String [] agrs) throws Exception{ myHbase h= new myHbase(); String [] familys = {"family1 h.createTable("mytable", familys); h.putData("mytable", "row", "family1", "qualifier:name1", "value1"); } } 运行Java应用程序:登录Hbase shell 发现可以get和scan到数据了:hbase(main):016:0> scan 'mytable' ROW COLUMN+CELL row column=family1:qualifier:name1, timestamp=1354559928275, v alue=value1 1 row(s) in 0.0410 seconds hbase(main):017:0> get 'mytable','row','family1:qualifier:name1' COLUMN CELL family1:qualifier:na timestamp=1354559928275, value=value1 me1 1 row(s) in 0.0120 seconds
