HBase-2.HBase 的体系结构、行键、列族设计
HBase体系结构l Client -包含访问HBase接口并维护cache来加快对HBase的访问l ZooKeeper-保障任务时候,仅有一个Master节点-存储Region的寻址入口-实时监控RegionServer的上线和下线信息。并实时通知Master-存储HBase的schema和table的元数据信息,通过ls /hbase可以查看l Mast
HBase体系结构
l Client
-包含访问HBase接口并维护cache来加快对HBase的访问
l ZooKeeper
-保障任务时候,仅有一个Master节点
-存储Region的寻址入口
-实时监控RegionServer的上线和下线信息。并实时通知Master
-存储HBase的schema和table的元数据信息,通过ls /hbase可以查看
l Master(不存在单点问题,通过ZK提供主从备份)
-为RegionServer分配region
-负责RegionoServer的负载均衡
-发现失效的RegionServer并重新分配其上的的Region
-管理用户对table的操作
l RegionServer
-维护region,处理对这些region的I/O操作
-负责切分在运行过程中变得过大的region
HBase行键设计原则(4)
写入要分散,减少region的热点问题。
例如: 历史交易订单,一般生成的订单号都是通过时间戳+随机的4位数字组成,可以让订单号倒序。这样rowkey是订单号的倒序存储,减少集中存储到某个region。
例如:用户上网流量存储到Hbase,一般是让手机号作为hbase的rowkey。由于手机号的后四位是随机的。可以让手机号倒序排序作为hbase的rowkey。
参考淘宝HBase使用方案
http://wenku.baidu.com/link?url=5M88SxStcPsVm71XaIOfpf_ELOqgS_VkwXMlBDQRrFplZmncg_8GNIVoWYmADcjLIerVwHx3hozMs3fP5gSrrHgYK4uQpWiEcOgikUntlWy |
思考问题:
直接将时间戳作为行健, 在写入单个 region 时候会发生热点问题,为什么?
回答: 直接使用时间戳会引发单个region的热点问题。
HBase的rowkey在底层是HFile存储数据的,以<K,V>键值对存放到SortedMap中。并且region中的rowkey是有序存储,若时间比较集中。就会存储到一个region中,这样一个region的数据变多,其它的region数据很好,加载数据就会很慢。直到region分裂可以解决。
HBase列族设计原则(3)
(1)一般不建议设计多个列族。具体原因如下
假如HBase表的表设置两个两个列族,若已一个列族1000万行,另一个列族100行。当一个要求region分裂时候,会导致100行的列会同样分布到多个region中。这样就出现基数问题,会导致扫描列族A的性能低下。某个列族在flush的时候,它邻近的列族也会因关联效应出发flush,最终导致系统产生更多的I/O。
(2)数据块缓存配置
如果经常顺序访问或者很少访问,可以关闭列族的缓存,让BLOCKCACHE 参数设置false,列族缓存默认打开。
(3)激进缓存配置
可以选择一个列族赋予更高的缓存,该参数IN_MEMORY 设置true。列族默认的关闭的。
(4)布隆过滤器(BLOOMFILTER)设置
减少硬盘读取数据带来的开销。对存储的数据块做反向测试,占用额外的空间。
(5)生产时间配置
超过这个时间设置的就会在下一次大合并中被删除。TTL =>"18000"
(6)列族压缩
压缩可以节省空间,读写数据会增加CPU的使用率 LZO,SNAPPY,GZIP
(7)单元时间版本
默认为1个版本,可以通过指定多个版本,来保存历史数据
更多推荐
所有评论(0)