因为看的时候不是在一个电脑上看的,所以笔记没有整理全面。
create 'mytable', 'cf' --表名,列族名
put 'mytable', 'first','cf:message','hello hbase' --表名,行名键,列族:列名,数据
get 'mytable','first' --表名,行键(读取一行数据)
scan 'mytable' --(返回的行是按行的名字排序的)
第二章
create 'users','info'
hbase中必须至少有一个列族,表创建后列族还可以更改
describe 'users' --查看表的所有默认参数,显示表的名字和列族的列表
hbase客户端配置文件:hbase客户端应用需要一份hbase配置信息来访问hbase-zookeeper quorum地址。
五个基本命令:get,put,delete,scan,increment(递增)。
数据操作:
HTablePool pool=new HTablePool();
HTableInterface usersTable=pool.getTable(usersTable);
Put p=new Put(Bytes.toBytes("TheRealMT"));//TheRealMT行键
p.add(..,..,..);//三个参数分别是列族,列,数值
userTable.put(p);
userTable.close();
hbase中修改数据使用的方式与存储新数据一样:创建put对象,在正确的坐标上给出数据,提交到表。
默认情况下,执行写入时会写到两个地方:预写式日志(WAL或者称为HLog)和MemStore。
MemStore是内存里的写入缓冲区,HBase中数据在永久写入磁盘之前在这里累计。
当MemStore填满后,其中的数据会刷写到硬盘,生成一个HFile。HFile是HBase使用的底层存储格式。
HFile对应于列族,一个列族可以有多个HFile,但一个HFile不能存储多个列族的数据。在集群的每个节点上,每个列族有一个MemStore。
每台HBase服务器上都有一个WAL,这台服务器上的所有表(和他们的列族)共享这个WAL。
读取数据操作:
Get g=new Get(Bytes.toBytes("TheRealMT"));
Result r=userTable.get(g);
BlackCache设计用来保存从HFile里读入内存的频繁访问的数据,避免硬盘度读。每个列族都有自己的BlackCache。
BlackCache和MemStore在一个JVM堆里。
HFile物理存放形式是一个block的序列外加这些block的索引。
block是建立索引的最小数据单位,也是从硬盘读取的最小数据单位。
block大小按照列族设定,默认是64KB。
第四章
表的模式设计:
这个表应该有多少个列族
列族使用什么数据
每个嫘祖应该多少个列
列名应该是什么,尽管列名不必在建表时定义,但是读写数据时是需要知道的
单元存放什么数据
每个单元存储多少个时间版本
行键结构是什么,应该包括多少信息
表设计:
定义表的访问模式,即怎么用这张表,想用这张表回答什么问题
读模式与写模式
HFile里的keyvalue对象存储列族名字。使用短的列族名字在减少硬盘和网络IO方面很有帮助。这种优化方法也可以应用到行键、列限定符、
甚至单元格。紧凑存储数据意味着可以减少IO负载。
宽表,高表
优化访问模式:1.调整表设计2.使用过滤器
对于Hbase集群,最消耗计算资源的操作发生在使用服务器端过滤扫描结果的时候。
尽可能分离不同访问模式
一个表按照行顺序存放在多个region里,一个regionserver管理多个region,这些region可能不是同一个表的;
数据是按照列族物理存储的,一个列族有一个块缓存和一个memstore;列族数据存放在多个HFile里面;
HFile存放多个block和这些block的索引。
一个hbase集群有-root-和.meta.文件(可以称为系统文件)
集群:master(可以有多个,但是同一时间只有一个处于激活状态),多个regionserver;