结构化数据
结构化数据具有固定的结构,属性划分,以及类型等信息。我们通常所理解的关系型数据库中所存储的数据信息,大多是结构化数据, 如职工信息表,拥有ID、Name、Phone、Address等属性信息。
结构化数据通常直接存放在数据库表中。数据记录的每一个属性对应数据表的一个字段。
非结构化数据
无法用统一的结构来表示。如文本文件、图像、视频、声音、网页等信息。
数据记录较小时(如KB级别),可考虑直接存放到数据库表中(整条记录映射到某一个列中),这样也有利于整条记录的快速检索。
数据较大时,通常考虑直接存放在文件系统中。数据库可用来存放相关数据的索引信息。
半结构化数据
具有一定的结构,但又有一定的灵活可变性。典型如XML、HTML等数据。其实也是非结构化数据的一种。可以考虑直接转换成结构化数据进行存储。
根据数据记录的大小和特点,选择合适的存储方式。这一点与非结构化数据的存储类似。
按行存储:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。
优点:
缺点:
按列存储:数据以列为单位,存储在底层文件系统中。
优点:
缺点:
HBase(Hadoop DataBase)起源于Google Bigtable,它是基于Key-Value列式存储格式系统,它是一个分布式的数据库,并支持海量数据的存储,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
HBase作为一个高可靠性、高性能、面向列、可伸缩的分布式数据库,提供海量数据存储功能,用来解决关系型数据库在处理海量数据时的局限性。
–海量数据量存储
–高并发操作
–数据随机读写操作
–数据强一致性
表Table
–Hbase以表为单位组织数据
行Row
–表中数据以行为单位,byte[]存储
行键RowKey
–row key是用来检索记录的主键
–各行数据按RowKey以字典序排序
–访问Hbase Table中的行,只有三种方式
—— 通过单个row key访问
—— 通过row key的range
—— 全表扫描
Region
–region是Hbase中分布式存储和负载的最小单元
–单个table一开始只有一个region
–随着记录越来越多,单个region太大,达到阈值,分裂成2个region(region split)
RegionServer
–不同region分布在不同的RegionServer上。
Store
–Region虽然是分布式存储的最小单元,但不是存储的最小单元
–Region由多个store组成,每个store保存个Column Family
–每个store由1个MemStore和0到多个StoreFile组成
–MemStore存储在内存中,StoreFile存储在HDFS上,底层称为Hfile
HFile
–存储排序的key-value映射结构
–文件由连续的块(默认64K)组成,块的索引信息存储在文件尾部
–打开Hfile时会优先在内存中加载块信息
——HFile Compaction(压缩)
HFile Compaction压缩策略
Compact
–把多个小的HFile合并成一个大的文件
–减少HFile数量,提升读效率
–执行时严重影响HBase性能
–触发后不能停止
Minor Compact
–把多个小的HFile合成数量较少的大的Hfile
–合并较快,但是会影响磁盘IO
Major Compact
–一个store下的所有文件合并
–删除过期版本数据
–删除delete marker数据
–指定间隔时间或手动执行
–管理用户对table的创建删除修改操作
–为Region server分配region
–负责Region server的负载均衡
–发现失效的Region server并重新分配其上的region
–维护region,处理对这些region的IO请求,直接与client进行数据通信
–负责切分(split)在运行过程中变得过大的region
–对region进行compact操作
–在运行中可以动态添加、删除
–包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
–通过选举,保证任何时候,集群中只有一个HMaster,HMaster与RegionServer启动时会ZooKeeper注册。
–存储所有Region的寻址入口。
–实时监控Region server的上线和下线信息,并实时通知给HMaster。
–存储HBase的schema和table元数据,如column family。
–Zookeeper的引入使得HMaster不再是单点故障。
–多个HMaster,同一时间只有一个active
–HMaster失效,由ZooKeeper选择另一个HMaster
–若无Hmaster:
读操作正常进行,因为region信息还在
region切分、负载均衡无法进行
RegionServer容错
–定时向Zookeeper发送心跳
–超时则HMaster将该RegionServer上的Region重新分配到其他RegionServer
–HLog是一个实现Write Ahead Log类,每次写入HLog
–每个RegionServer维护一个HLog
–HLog定期删除旧的文件(已经持久化到HFile的数据)
–HMaster通过ZooKeeper感知
–处理HLog,针对不同的Region拆分Log数据
–重新分配失效region
–通过HLog信息重新写进MemStore,然后flush到HFile