HBase知识点总结

HBase数据模型术语

Table(表格):HBase表格有多行组成
Row(行):行按照key的字母顺序存储在表格中,Row Key只能存储64k的字节数据
Column(列):包含列族列的限定符
Column Family(列族):列族包含一组列和他们的值,HBase把同一列族里面的数据存储在同一个目录,由几个文件保存
Column Qualifier(列的限定符):列的限定符是列族中数据的索引
Cell(单元格):单元格是由行,列族,列的限定符,时间戳组成的唯一确定元素,Cell中的数据没有类型,全是字节码格式存储
TimeStamp(时间戳):时间戳是在值旁边的一个用于区分值的版本数据

HBase体系架构

Client:访问HBase的接口并维护cache来加快对HBase的访问
Zookeeper:集群管理,确保只有一个工作状态的master
Master:为Region Server分配Region,负责Region Server的负载均衡,发现失效的RegionServer并重新分配Region
RegionServer:维护Region,处理对这些Region的IO请求
Region:HBase把表划分成多个区域(Region),每个Region保存一个表里面某段连续的数据
HLog:记录了写入数据的归属信息
MemStore,StoreFile:一个Region由多个Store组成,一个Store对应一个列族,Store包括位于内存中的MemStore和位于磁盘中的StoreFile,当MemStore达到某个阈值,RegionServer会启动flashcache写入StoreFile

HBase优化

1.Pre-Creating Regions:预先创建一些空的Regions,当数据写入HBase时,按照Region的分区情况,在HBase中做负载均衡
2.Row Key的设计原则:越小越好;符合业务;散列性(取反/hash)
3.不要定义太多的列族
4.In memory: HColumnDescriptor.setInMemory(true)将表放到 RegionServer 的缓存中,保证在读取的时候被 cache 命中
5.Max Version:通过 HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据 的最大版本,如果只需要保存最新版本的数据,那么可以设置 setMaxVersions(1)。 
6.Time To Live:通过 HColumnDescriptor.setMaxVersions(int maxVersions)设置表中数据 的最大版本,如果只需要保存最新版本的数据

HBase写表优化

1.多HTable并发写 
2.HTable参数设置 :
    Auto Flush:HTable.setAutoFlush(false)将HTable写客户端的自动flush关闭,这样可以批量写入数据到HBase,而不是有一条put就执行一次更新,只有当put填满客户端写缓存时,才实际向HBase服务端发起写请求
    WriteBuffer:HTable.setWriteBufferSize(writeBufferSize)方法可以设置HTable客户端的写buffer大小
    WAL Flag:Put.setWriteToWAL(false)或Delete.setWriteToWAL(false)函数,放弃写 WAL日志,从而提高数据写入的性能
3.批量写:HTable.put(Put) -> HTable.put(List)
4.多线程并发写

HBase读表优化

1.多个HTable并发读
2.HTable参数设置
    Scanner Caching:HBase scanner一次从服务端抓取的数据条数,默认情况下一次一条
    Scan Attribute Selection:可以减少网络传输数据量,否则默认scan操作会返回整行所有 Column Family 的数据
    Close ResultScanner:通过scan取完数据后,记得要关闭ResultScanner,否则RegionServer可能会出现问题(对应的Server资源无法释放)
3.批量读:HTable.get(Get) -> HTable.get(List<Get>)
4.多线程并发读
5.缓存调查结果
6.Blockcache

你可能感兴趣的:(Study)