HBase,
Hadoop是分布式基础框架,hdfs为海量数据提供了存储功能.
InnoDB 对表空间有限制 最大只能是 64TB
MySaM(MySQL) 最大表限制: 256TB
PB
命名空间:namespace 同一个命名空间不能有相同的名称
包:package 用来做管理用的
1111111@qq.com @ -> at qq.com(域名)
1111111@163.com
预写:预先写入数据里面 预写一定是顺序写的,非常快
预读:查询一条数据,会把它关联的数据先查出来,这样下回查询就快些
采用大数据的存储框架存储来存储海量数据–>HBase(依托于Hadoop)
什么是HBase
HBase的原型是Google的Big Table论文,受到了该论文的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储.
2003年发布的GFS
2004年发布的MapReduce
2006年Google发表的BigTable.
HBase是一个高可靠(HLog,HDFS)/高性能(MemStore,Region)/面向列(列族Store)/可伸缩(Zookeeper,RegionServer)的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群.
HBase的目标是存储并处理大型的数据,更具体来说是仅需使用普遍的硬件配置,就能够处理由成千上万的行和列所组成的大型数据.
Hbase特点
HRegionServer:负载均衡
HRegion:分区
Store:存储一部分的数据
Mem Store 缓存
HLog:避免数据丢失,顺序读写,日志文件 有个预写
- Client
Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的META.元数据的信息. - Zookeeper
HBase通过Zookeeper来做master的高可用/RegionServer的监控/元数据的入口以及集群配置的维护等工作.具体工作如下:
通过Zookeeper来保证集群中只有1个master运行,如果master异常,会通过竞争机制产生新的master提供服务.
通过Zookeeper来监控RegionServer的状态,当RegionServer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息.
通过Zookeeper存储元数据的统一入口地址. - Hmaster
master节点的主要职责如下:
为RegionServer分配Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的Region,并将失效的Region分配到正常的RegionServer上.
当RegionServer失效的时候,协调对应HLog的拆分. - HregionServer
HregionServer直接对接用户的读写请求,是真正的"干活"的节点.它的功能概况如下:
管理master为其分配的Region.
处理来自客户端的读写请求.
负责和底层HDFS的交互,存储数据到HDFS
负责Region变大以后的拆分.
负责Storefile的合并工作. - HDFS
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务.
数据多副本,保证高可靠和高可用性.
列族是表的一部分,必须要有
列可以动态增加,
hbase的rowkey的设计原则
Rowkey设计时需要遵循三大原则:
- 唯一性原则
rowkey在设计上保证其唯一性.rowkey是按照字典顺序排序存储的,因此,设计rowkey的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块. - 长度原则
rowkey是一个二进制码流,可以是任意字符串,最大长度64kb,实际应用中一般为10-100bytes,以byte[]形式保存,一般设计成定长.建议越短越好,不要超过16个字节,原因如下:数据的持久化文件HFile中是按照KeyValue存储的,如果rowkey过长,比如超过100字节,1000w行数据,光rowkey就要占用100*1000w=10亿个字节,将近1G数据,这样会极大影响HFile的存储效率;MemStore将缓存部分数据到内存,如果rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率.目前操作系统都是64位系统,内存8字节对齐,控制在16个字节,8字节的整数倍利用了操作系统的最佳特性. - 散列原则
如果rowkey按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个RegionServer,以实现负载均衡的机率.如果没有散列字段,首字段直接是时间信息,所有的数据都会集中在一个RegionServer上,这样在数据检索的时候负载会集中在个别的RegionServer上,造成数据热点问题,会降低查询效率.