1。HBase
,,,,一个构建在HDFS上的高可靠,高性能,面向列,可伸缩,分布式列存储开源数据库,主要用于存储海量数据,同时使用mapreduce处理HBase中的数据,利用饲养员作为协同服务。读写相对简单,不支持条件查询
2。HBase与HDFS对比
,,,,都具有良好的容错性和扩展性
,,,, HDFS适合批处理场景,但是不支持数据随即查找,不适合增量数据处理,不支持数据更新
3。HBase的特点:
,,,,海量数据:可支持上百万列,分成多个地区
,,,,无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列
,,,,面向列存储:面向列的存储和权限控制,列独立检索
,,,,记录稀疏:列为空(NULL),并不占用存储空间
,,,,数据多版本:每个单元的数据可以有多个版本,通过时间戳区分
,,,,数据类型单一:所有数据都是字符串
4。HBase结构组成
,,,,行关键:
,,,,,,,,字节数组
,,,,,,,,表中每条记录的“主键”
,,,,,,,,方便快速查找
,,,,时间戳:
,,,,,,,,每次数据操作对应的时间戳,看作数据的版本号
,,,,列族:
,,,,,,,,拥有一个名称(string)
,,,,,,,,包含一个或者多个相关列(列)
,,,,专栏:
,,,,的值:
5。支持的操作
,,,,所有操作基于rowkey的
,,,,支持CRUD(创建、读取、更新、删除)以及摆放,得到multiput,扫描
,,,,没有内置加入操作,可使用MapReduce实现
6。HBase为每个值维护了多级索引,即& lt;关键,列族,列名,timestamp>
,,,,表中的所有行都按照行关键的字典序排列,在行的方向上分割为多个地区,地区是HBase中分布式存储与负载均衡的最小单元,不同的地区分布到不同RegionServer上;
,,,,地区增大到一个阀值的时候,区域就会分为两个新的地区,之后会有越来越多的地区
,,,,地区由一个或多个存储组成,每个店保存一个列家族
,,,,每个商店又由一个memStore和0至多个StoreFile组成;
,,,, memStore存储在内存中,StoreFile存储在HDFS上
7。HBase的基本组件
,,,,客户:通过RPC与HMaster及HRegionServer进行通信,并维护缓存加快对HBase的访问
,,,,动物园管理员:
,,,,,,,,保证集群中总是存在一个HMaster
,,,,,,,,存储所有地区的寻址入口
,,,,,,,,实时监控区域服务器的上线和下线信息,并实时通知给主人
,,,,,,,,存储HBase的模式和表元数据
,,,, HMaster:
,,,,,,,,为地区服务器分配地区
,,,,,,,,复杂地区服务器的负载均衡
,,,,,,,,发现失效的区域服务器并重新分配其上的地区
,,,,,,,,管理用户对表的增删改查操作
,,,, HRegionServer:
,,,,,,,,维护地区,处理对地区的I/O请求
,,,,,,,,负责切分在运行过程中变得过大的地区
8. HBase容错机制
,,,, HMaster:管理员重新选择一个新主人的
,,,,,,,,无主过程中,数据读取仍照常进行
,,,,,,,,无主过程中,地区切分,负载均衡等无法进行
,,,, HRegionServer容错:定时向管理员汇报心跳,如果一定时间内未出现心跳
,,,, HMaster将该HRegionServer上的地区重新分配到其他RegionServer上
,,,,失效服务器上“预写“日志由主服务器进行分割并派送给新的RegionServer上
9。HBase访问方式
,,,,本地Java API:常规高效
,,,,,,,,创建一个配置对象(包含各种配置信息hbase-default.xml, hbase-site.xml)
,,,,,,,,,,,,配置设计=HbaseConfiguration.create ()
,,,,,,,,构建一个HTable句柄(提供配置对象,提供待访问表的名称)
,,,,,,,,,,,, HTable表=new HTable(参看表)
,,,,,,,,,,,,仅提供行级事务,严格的行一致性,并发读,顺序写
,,,,,,,,执行操作(支持,,删除、扫描等的批处理)
,,,,,,,,,,,, table.getTableName ();
,,,,,,,,关闭HTable句柄(内存数据刷新到磁盘上,释放资源)
,,,,,,,,,,,, table.close ()
,,,, HBase壳:用于管理
,,,,节俭网关:序列化,支持c++、Python等语言
,,,,,,,,启动节俭服务器:hbase-daemon。sh开始thtift
,,,,,,,,生成Hbase节俭端接口文件
,,,,,,,,节俭——创xxx Hbase.thrift
,,,,,,,,编写客户端代码
,,,如:1。null